Traduzir Erro de Foreign Key
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
ou
alguem conhece algum para traduzir um violation de foreign key (chave estrangeira) do firebird.
valeu :lol:
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
Curtidas 0
Respostas
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
20/10/2004
esse código eu coloco no evento onposterro do ibdataset cetro?
GOSTEI 0
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
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
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+
T+
GOSTEI 0
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:
valeu amigo :lol:
GOSTEI 0
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+
violation of FOREIGN KEY constraint: “”
pegue o nome que está ai entre aspas (´) após os dois-pontos (:)
T+
GOSTEI 0
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
20/10/2004
MENSAGEM = ´violation of FOREIGN KEY constraint ´NOME_CHAVE´ on table ´NOME_TABELA´´
T+
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