Fórum (Key Violation of Primary or unique key constraint) #243972

22/07/2004

0

Meus amigos do forum, eis a minha dúvida.
Utilizando o ibExpert tento fazer uma inclusao numa tabela qualquer
cuja chave primária já existe me retorna uma mensagem em ingles (Key Violation of Primary or unique key constraint) até aí tudo perfeito, mas quando rodo a minha aplicação digito o código sabendo que já existe na tabela para forçar o erro de chave duplicada, clico no botão gravar
e não recebo o retorno de chave primária já cadastrada.
Utilizo o delphi 7, componente dbExpress e banco de dados firebird 1.5
Utlizo os seguintes componentes:
sqlConnection, sqlDataSet, dataSetProvider, clientDataSet e o DataSource.
Tenho que alterar alguma propriedade de um destes componentes para receber esta mensagem de erro?
:?:
Plácido


Placido

Placido

Responder

Posts

22/07/2004

Vinicius2k

Plácido,

Vc está executando a instrução SQL diretamente no banco ou utilizando o ApplyUpdates do ClientDataSet ?
Se for ApplyUpdates, ele não gera exceção caso não consiga aplicar os updates ele apenas retorna um número de erros facilmente testado com :
if CDS.ApplyUpdates(0) = 0 then 
  // não houveram erros
else // houveram erros

Para exibir a mensagem de erro do banco trabalhe no evento OnReconcileError do CDS por exemplo :
ShowMessage(E.Message);


Espero ter ajudado...
T+


Responder

Gostei + 0

22/07/2004

Djjunior

o metódo de gravação não está no meio de um try não ? Neste
coloque uma instrução tipo

try
SuaTable.Post;
except
on e: exept do
messagedlg(´Erro ao gravar dados na tabela ! O erro foi:´ + #13 +
e.message, mtwarning, [mbok], 0);
end;
end;


Responder

Gostei + 0

22/07/2004

Vinicius2k

try 
  SuaTable.Post;
except
  on e: exept do
    messagedlg(´Erro ao gravar dados na tabela ! O erro foi:´ + #13 + 
    e.message, mtwarning, [mbok], 0);
  end;
end;


:?: isto não se aplica em ClientDataSets para verificar erros oriundos do banco... e se a instrução SQL for direta o caminho seria buscar a exceção do método seria ExecSQL da SQLQuery ou SQLDataSet...


Responder

Gostei + 0

22/07/2004

Placido

Meus amigos obrigado pelas dicas...
Vou implementar e retorno a informação se deu certo ou não.
Obrigado :roll:
Plácido


Responder

Gostei + 0

22/07/2004

Placido

Estou utilizando o método ApplyUpdates(-1).
Grato :roll:


Responder

Gostei + 0

22/07/2004

Placido

No evento after uso o comando abaixo:

(DataSet as TClientDataSet).ApplyUpdates(-1);


No evento OnReconcileError do CDS da dica coloquei este comando

ShowMessage(E.Message);

Deu a mensagem de erro beleza, mas dá uma mensagem especificando o número do erro e o nome da tabela, como proceder para enviar a mensagem em portugues? ex. (Código já cadastrado)?
Obrigado pela ajuda.
Um abraço


Responder

Gostei + 0

22/07/2004

Placido

No evento after uso o comando abaixo: (DataSet as TClientDataSet).ApplyUpdates(-1); No evento OnReconcileError do CDS da dica coloquei este comando ShowMessage(E.Message); Estou aguardando ajuda dos colegas....... Deu a mensagem de erro beleza, mas dá uma mensagem especificando o número do erro e o nome da tabela, como proceder para enviar a mensagem em portugues? ex. (Código já cadastrado)? Obrigado pela ajuda. Um abraço



Responder

Gostei + 0

23/07/2004

Placido

Meus colegas deu certo, agora estou recebendo a mensagem de chave duplicada, agora quero transofrmar esta mensagem de erro, em portugues, ex. (Código já gravado).
Obrigado pelas dicas.
Plácido


Responder

Gostei + 0

23/07/2004

Vinicius2k

Placido,

Não mostre diretamente E.Message, mas lembre-se de que esta mensagem pode não ser a única mensagem de erro que o banco retorna então é aconselhável tratar as conhecidas, mas deixar que seja exibida a original caso não se enquadre como conhecida... faça algo parecido com isto :
if Copy(E.Message,1,13) = ´Key Violation´ then
  ShowMessage(´Codigo já existente.´)
else ShowMessage(E.Message);


Espero ter ajudado...
T+


Responder

Gostei + 0

23/07/2004

Placido

Vinícius Obrigado pela dica, fique com Deus.
Um abraço.
Plácido


Responder

Gostei + 0

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

Aceitar