GARANTIR DESCONTO

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

Noenxe

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:

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

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

Aceitar