Fórum Erro de Foreign Key #356634
04/04/2008
0
Oi, no IBDataSet existe o envento OnDeleteError, como eu faço para saber que o erro é por causa que aquele registro está com erro de chave estrangeira?
Noenxe
Curtir tópico
+ 0
Responder
Posts
05/04/2008
Delphi32
Tanto o evento OnDeleteError quanto o OnPostError expõem uma variável [b:7fe73e6d50]E[/b:7fe73e6d50] do tipo [b:7fe73e6d50]EDatabaseError[b/]. Por ser derivada de uma [b]Exception[/b:7fe73e6d50] possui o atributo [b:7fe73e6d50]Message[/b:7fe73e6d50]. Teste o conteúdo desse atributo para saber o erro gerado. Exemplo:
Para saber qual mensagem é gerada em um determinado erro eu normalmente forço o erro a acontecer e salvo a string com a mensagem em algum lugar para poder colar no código. Deve haver no código da VCL um arquivo de constantes com essas mensagens, mas eu nunca procurei.
Obs.: Se não estou enganado a mensagem de erro de chave estrangeira exibe o nome da chave. Você pode aproveitar parte da mensagem e mudar a comparação no código de ´=´ para ´Pos(x, y)>=1´.
Qualquer coisa, volte a postar.
t+!
if E.Message=´Key violation.´ then ShowMessage(´Violação na chave primária´);
Para saber qual mensagem é gerada em um determinado erro eu normalmente forço o erro a acontecer e salvo a string com a mensagem em algum lugar para poder colar no código. Deve haver no código da VCL um arquivo de constantes com essas mensagens, mas eu nunca procurei.
Obs.: Se não estou enganado a mensagem de erro de chave estrangeira exibe o nome da chave. Você pode aproveitar parte da mensagem e mudar a comparação no código de ´=´ para ´Pos(x, y)>=1´.
Qualquer coisa, volte a postar.
t+!
Responder
Gostei + 0
05/04/2008
Noenxe
Obrigado, fiz com base no que você falou um função que me ´traduz´ o erro.
function verificaErro(Erro: String):String; begin result:= Copy(Erro,0,24); end; if (verificaErro(E.Message) = ´violation of FOREIGN KEY´) then begin MessageDlg(´Está sendo usada, não pode ser removida;.´,mtError,[mbOK],0); Abort; end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)