Fórum BDExpress - Insere Registro Duplicado com Índice Único #299643

16/10/2005

0

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


Userba

Userba

Responder

Posts

17/10/2005

Firekiller

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.


Responder

Gostei + 0

17/10/2005

Ricna

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar