Traduzir Erro de Foreign Key

Firebird

20/10/2004

quando temos um campo com primary key no banco e ele é violado pela aplicação é exibida uma mensagem de key violation e eu uso um código bem conhecido para traduzir essa mensagem

ErroMens := E.Message; 
if ErroMens = ´Key violation.´ then begin ShowMessage(´Chave Primária Inválida !´); 
action := daAbort; 


ou

if EDBEngineError(E).Errors[0].ErrorCode = 9729 then
ShowMessage(´Registro já existe!´);
Action:= daAbort;


alguem conhece algum para traduzir um violation de foreign key (chave estrangeira) do firebird.

valeu :lol:


Tap_pedroso

Tap_pedroso

Curtidas 0

Respostas

Afarias

Afarias

20/10/2004

if Pos(´FOREIGN KEY´, E.Message) > 0 then 
begin 
  ShowMessage(´Erro de CE´); 
  Action := daAbort;
end;




T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

20/10/2004

esse código eu coloco no evento onposterro do ibdataset cetro?


GOSTEI 0
Sremulador

Sremulador

20/10/2004

Amigo utilize o componente TapplicationEvent que você pegara todos os erros e tratar do geito que quiser, aquase todos :(


GOSTEI 0
Tap_pedroso

Tap_pedroso

20/10/2004

bom vc ter lembrado do tapplicationevents eu utilizo ele para pegar hints e jogar no statusbar. mas e daí eu utilizo o código que o afarias me passou no evento onmessage do applicationevents?


GOSTEI 0
Afarias

Afarias

20/10/2004

use em qualquer lugar (de sua preferência) q tiver ´acesso´ à exceção! Try/Except, Application.OnExepion, OnPostError, o q for!


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

20/10/2004

blz deu certo o e.message agora queria saber se tem como eu capturar o nome da chave estrangeira na hora do erro para eu indicar ao usuario qual campo está incorreto. Na mensagem de erro que aparece na aplicação quando não está tratada o erro mostra o nome do foreign key ex: fkteste.


valeu amigo :lol:


GOSTEI 0
Afarias

Afarias

20/10/2004

a mesagem é no formato::

violation of FOREIGN KEY constraint: “”

pegue o nome que está ai entre aspas (´) após os dois-pontos (:)


T+


GOSTEI 0
Tap_pedroso

Tap_pedroso

20/10/2004

eu coloquei da maneira q vc me passou e não deu eu tive que colocar assim para dar certo:

     if Pos(´FOREIGN KEY´, E.Message) > 0 then
      begin
      ErroMens := E.Message;
      if ErroMens = ´violation of FOREIGN KEY constraint "FKPRODVERSAO" on table "TABVERSAO"´ then
        begin
          messagedlg(´Atenção: Ocorreu um Erro de Violação de Chave Estrangeira.´+
          ´ Você Tentou Adicionar na Versão um Produto ´+
          ´que não está Cadastrada no Sistema. Verifique os Dados do Produto e Tente ´+
          ´Salvar Novamente.´,mterror,[mbok],0);
        end;
      if ErroMens = ´violation of FOREIGN KEY constraint "FKRNVERSAO" on table "TABVERSAO"´ then
        begin
          messagedlg(´Atenção: Ocorreu um Erro de Violação de Chave Estrangeira.´+
          ´ Você Tentou Adicionar na Versão uma Regra de Negócio ´+
          ´que não está Cadastrada no Sistema. Verifique os Dados da Regra de Negócio e Tente ´+
          ´Salvar Novamente.´,mterror,[mbok],0);
        end;
        Action := daAbort;
      end;



GOSTEI 0
Afarias

Afarias

20/10/2004

MENSAGEM = ´violation of FOREIGN KEY constraint ´NOME_CHAVE´ on table ´NOME_TABELA´´

var
  Texto, NomeChave, NomeTabela: string;
begin
  Texto := E.message; 

  Delete(Texto, 1, Pos(´"´, Texto));
  NomeChave := Copy(Texto, 1, Pos(´"´, Texto)-1);

  Delete(Texto, 1, Pos(´"´, Texto));
  Delete(Texto, 1, Pos(´"´, Texto));
  NomeTabela := Copy(Texto, 1, Pos(´"´, Texto)-1);

end;



T+


GOSTEI 0
POSTAR