BDExpress - Insere Registro Duplicado com Índice Único
Olá
Amigos... Estou iniciando com o DBExpress
Nó codigo do botão Gravar tenho
CdsCli.post;
CdsCli.ApplyUpdates(0);
Botoes(true);
Tenho um campo -> ´TM_Termo´ definido como indice (único) no banco FireBird.
Insiro um valor duplicado para o campo... ´Ex: insiro o valor ´A´, depois insiro o valor ´A´ novamente.
O programa registra no BD somente o primeiro ´A´, mas ele ´Não´ me retorna nenhuma mensagem de erro quando tento insirerir o segundo ´A´.
Como faço para tratar esta possível exceção gerada pelo banco?
Tipo, para poder informar ao usuário que o valor já existe no Banco Firebird?
Aproveitando... Tenho duvidas a respeito da configuração dos Flags abaixo, nos fields do SQLDataSet e do ClientDataSet:
pfInUpdate, pfInWhere, pfInKey, pfHidden
Quando devo configurá-los diferente dos valores padrões?
E preciso configurar os valores nos 2 componentes? (SQLDataSet e ClientDataSet) ?
Obrigado.
User_BA
Amigos... Estou iniciando com o DBExpress
Nó codigo do botão Gravar tenho
CdsCli.post;
CdsCli.ApplyUpdates(0);
Botoes(true);
Tenho um campo -> ´TM_Termo´ definido como indice (único) no banco FireBird.
Insiro um valor duplicado para o campo... ´Ex: insiro o valor ´A´, depois insiro o valor ´A´ novamente.
O programa registra no BD somente o primeiro ´A´, mas ele ´Não´ me retorna nenhuma mensagem de erro quando tento insirerir o segundo ´A´.
Como faço para tratar esta possível exceção gerada pelo banco?
Tipo, para poder informar ao usuário que o valor já existe no Banco Firebird?
Aproveitando... Tenho duvidas a respeito da configuração dos Flags abaixo, nos fields do SQLDataSet e do ClientDataSet:
pfInUpdate, pfInWhere, pfInKey, pfHidden
Quando devo configurá-los diferente dos valores padrões?
E preciso configurar os valores nos 2 componentes? (SQLDataSet e ClientDataSet) ?
Obrigado.
User_BA
Userba
Curtidas 0
Respostas
Firekiller
16/10/2005
Bom, na verdade ele não insere valores duplicados, mas é que a exceção nesse caso deve ser trtado no evento OnReconcileError. Experimente colocar no evento OnReconcileError (CLientDataSet) o seguinte código:
Showmessage( E.Message );
Declarando a unit Dialogs na uses. Isso vai apresentar a você a exceção da restrição criada pelo índice único.
Quanto a sua outra duvida, essas flags, são utilizadas para saber como se comportará o campo em um evento de atualização, isso é, quais ficaram na parte de busca (where).
Se não me engano seria isso:
pfInKey - Valores de chave
pfInWhere - Inserido na clausula Where
pfInUpdate - Inserido nas alterações (pode ter seu valor alterado).
pfHidden - Fica oculto quanto os dados forem passados.
Quanto ao fato de colocá-los no SqlDataSet ou ClientDataSet, vai depender da forma com a qual você trabalha seu DataSetProvider.
Eu utilizo os mesmos apenas no SqlDataSet, e deixo no DataSetProvider as seguintes opções:
poIncProps, poAllowCommandText setadas como true.
Showmessage( E.Message );
Declarando a unit Dialogs na uses. Isso vai apresentar a você a exceção da restrição criada pelo índice único.
Quanto a sua outra duvida, essas flags, são utilizadas para saber como se comportará o campo em um evento de atualização, isso é, quais ficaram na parte de busca (where).
Se não me engano seria isso:
pfInKey - Valores de chave
pfInWhere - Inserido na clausula Where
pfInUpdate - Inserido nas alterações (pode ter seu valor alterado).
pfHidden - Fica oculto quanto os dados forem passados.
Quanto ao fato de colocá-los no SqlDataSet ou ClientDataSet, vai depender da forma com a qual você trabalha seu DataSetProvider.
Eu utilizo os mesmos apenas no SqlDataSet, e deixo no DataSetProvider as seguintes opções:
poIncProps, poAllowCommandText setadas como true.
GOSTEI 0
Ricna
16/10/2005
vc pode gerar um erro no OnChange da tabela ou no próprio código para fiacr mais especificado o tipo de erro.
ex:
if ClientDataSet.ApplyUpdates(0) > 0 then
ShowMessage(´Ocorreu um erro!´);
e também previamente pode tratar o post com try/except.
ex:
if ClientDataSet.ApplyUpdates(0) > 0 then
ShowMessage(´Ocorreu um erro!´);
e também previamente pode tratar o post com try/except.
GOSTEI 0