ClientDataSet Blob (Bug ???)
Sds. caros amigos do fórum.
Estou usando o ClientDataSet para acessar tabelas do IB. Para minha surpresa estou tendo problemas com campos do tipo Blob. Tenho uma tabela chamada Cursos com a seguinte estrutura:
CODIGO INTERGER NOT NULL,
DESCRICAO VARCHAR(50),
OBS BLOB SUB_TYPE TEXT SEGMENT SIZE 240
e primary key para CODIGO.
Quando insiro um novo registro, se deixo o campo OBS em branco, apos dar o post ele não grava nada, mas também não da erros. A exception somente ocorre quando vou finalizar o sistema.
Consegui ´contornar´ o problema grando um espaço em branco dentro de OBS.
Agora, quando vou alterar um registro já existente, se somente altero o campo OBS, o ReconcileError me retorna o seguinte erro:
Unable to find record. No key specified
Se faço a mesma coisa, somente adicionando um espaço em branco no final da descrição, nã dá erro e grava perfeitamente.
Se alguém já passou por isso, se souber uma solução, e puder me ajudar,
desde já agradeço.
Valeu.
Emerson
Estou usando o ClientDataSet para acessar tabelas do IB. Para minha surpresa estou tendo problemas com campos do tipo Blob. Tenho uma tabela chamada Cursos com a seguinte estrutura:
CODIGO INTERGER NOT NULL,
DESCRICAO VARCHAR(50),
OBS BLOB SUB_TYPE TEXT SEGMENT SIZE 240
e primary key para CODIGO.
Quando insiro um novo registro, se deixo o campo OBS em branco, apos dar o post ele não grava nada, mas também não da erros. A exception somente ocorre quando vou finalizar o sistema.
Consegui ´contornar´ o problema grando um espaço em branco dentro de OBS.
Agora, quando vou alterar um registro já existente, se somente altero o campo OBS, o ReconcileError me retorna o seguinte erro:
Unable to find record. No key specified
Se faço a mesma coisa, somente adicionando um espaço em branco no final da descrição, nã dá erro e grava perfeitamente.
Se alguém já passou por isso, se souber uma solução, e puder me ajudar,
desde já agradeço.
Valeu.
Emerson
Emerson_ti
Curtidas 0
Respostas
Alexrol
20/03/2004
Ola .
E o seguinte em vez de vc mandar um Post na clientDataSet de um ApplyUpdates(0), é muito mais seguro.
Tnte isso e verifique o que acontece
E o seguinte em vez de vc mandar um Post na clientDataSet de um ApplyUpdates(0), é muito mais seguro.
Tnte isso e verifique o que acontece
GOSTEI 0
Maicongabriel
20/03/2004
Ola .
E o seguinte em vez de vc mandar um Post na clientDataSet de um ApplyUpdates(0), é muito mais seguro.
Tnte isso e verifique o que acontece
Não é que é mais seguro; É o correto! O [b:627b335246]Post[/b:627b335246] em um ClientDataSet apenas salva os dados no Cache do ClientDataSet, enquanto [b:627b335246]ApplyUpdates[/b:627b335246] se encarrega de salvar estes dados na Base!
E não utilize [b:627b335246]ApplyUpdates(0)[/b:627b335246] e sim [b:627b335246]ApplyUpdates(1)[/b:627b335246], juntamente com o metodo [b:627b335246]OnReconcileError[/b:627b335246], para capturar qualquer Erro na gravação dos dados! :wink:
GOSTEI 0
Emerson_ti
20/03/2004
Valeu pessoal, mas eu já estou usando ApplyUpdates no AfterPost.
Um problema eu já resolvi, no SQLDataset configurei o ProviderFlags para os campos como abaixo:
Codigo - Chave Primaria/Integer - [pfInKey, pfInWhere, pfInUpdate]
Descricao - Varchar(50) - [pfInUpdate]
Obs - Blob - [pfInUpdate]
Funcionou legal !!!
Só que, quando deixo o campo Obs em branco dá um pau violento:
Access violation at address 004023C2 in module ´Escolar.exe´. Read of address FFFFFFFC
Esta msg aparece justamente no ReconcileError.
Se alguém puder me ajudar, eu agradeço.
Abraços
Emerson
Um problema eu já resolvi, no SQLDataset configurei o ProviderFlags para os campos como abaixo:
Codigo - Chave Primaria/Integer - [pfInKey, pfInWhere, pfInUpdate]
Descricao - Varchar(50) - [pfInUpdate]
Obs - Blob - [pfInUpdate]
Funcionou legal !!!
Só que, quando deixo o campo Obs em branco dá um pau violento:
Access violation at address 004023C2 in module ´Escolar.exe´. Read of address FFFFFFFC
Esta msg aparece justamente no ReconcileError.
Se alguém puder me ajudar, eu agradeço.
Abraços
Emerson
GOSTEI 0
Cesarpir
20/03/2004
Amigo tenho o mesmo problema e faço assim para não acontecer este erro:
No botão gravar antes do applyupdates(0) ou o post
if trim(nomedocampo.asstring) = ´´ then nomedocampo.asstring := ´ ´;
Ou seja se o usuário não digitar nada eu gravo um espaço em branco.
Bom se achar uma solução melhor por favor me envie, eu uso o Delphi 7, DBExpress com Firebird 1.5, já tentei fazer o que vc fez com as propriedades do datasetprovider ai só complicou mais ainda.
Espero que ajude
Abraços
César
No botão gravar antes do applyupdates(0) ou o post
if trim(nomedocampo.asstring) = ´´ then nomedocampo.asstring := ´ ´;
Ou seja se o usuário não digitar nada eu gravo um espaço em branco.
Bom se achar uma solução melhor por favor me envie, eu uso o Delphi 7, DBExpress com Firebird 1.5, já tentei fazer o que vc fez com as propriedades do datasetprovider ai só complicou mais ainda.
Espero que ajude
Abraços
César
GOSTEI 0