Tratar mensagens de erro
Srs, compilo o programa e na sua execução em tempo de projeto, eu tento excluir um registro que é chave estrangeira em outra tabela, o mesmo não é excluido e o delphi me retorna um erro do tipo ´ violation of FOREIGN KEY constraint ´FK_PRODUTOS_CERTIFICADO´ on table ´CERTIFICADO´ ´. Ao executar esta aplicação sem ser em tempo de projeto e executar o procedimento acima, o registro não é excluído, mas o programa não me retorna o erro acima, que emitido quando estou em tempo de projeto. Eu gostaria então, de saber como exibir a mensagem de erro para o usuário, mas de forma transparente, como por exemplo [color=red:a678acdd51]´Este registro está sendo usado em um certificado, não pode ser apagado´ [/color:a678acdd51].
Agradeço desde já.
ps.: Estou usando Delphi7 + Firebird1.5 e DBExpress.
Agradeço desde já.
ps.: Estou usando Delphi7 + Firebird1.5 e DBExpress.
Programalista
Curtidas 0
Respostas
Vinicius2k
15/09/2004
Colega,
Vc está usando TClientDataSets ?
Se sim, o método ApplyUpdates não gera exceção mas sim EReconcileError...
Para exibir a mensagem de erro vc deve utilizar o evento OnReconcileError do ClientDataSet e para personalizar a mensagem, pode-se usar algo parecido com este código neste evento :
Espero ter ajudado...
T+
Vc está usando TClientDataSets ?
Se sim, o método ApplyUpdates não gera exceção mas sim EReconcileError...
Para exibir a mensagem de erro vc deve utilizar o evento OnReconcileError do ClientDataSet e para personalizar a mensagem, pode-se usar algo parecido com este código neste evento :
... var Msg: String; begin Msg:= ´Descrição não disponível.´; if (Pos(´violation of PRIMARY or UNIQUE KEY´, E.Message) > 0) or (Pos(´attempt to store duplicate value´, E.Message) > 0) then begin Msg:= ´A tentativa de inserção/edição iria resultar em duplicidade ´ + ´de registros nesta tabela.´; end; if Pos(´violation of FOREIGN KEY´, E.Message) > 0 then begin Msg:= ´A tentativa de atualização iria causar falhas de relacionamento, ´+ ´por existirem dependencias entre as tabelas envolvidas.´; end; ShowMessage(E.Message + #13 + ´Descrição do Erro: ´ + 13 + Msg); end;
Espero ter ajudado...
T+
GOSTEI 0
Programalista
15/09/2004
Caro Vinicius2K, funcionou a sua dica, valeu mesmo! Agora quando tento excluir um registro ou violar uma chave primaria, o sistema exibe mensagens personalizadas para o usuário.
GOSTEI 0
Technos
15/09/2004
Aee Vinicius.
To com o mesmo problema que vc resolveu aee pro programalista, só que estou trabalhando com componentes IBO CORE.
Qual o Evento semelhante ao OnReconcileError pro IBO ?
Ele fica na Query ? no Ib_Connection ? No Transaction ?
Se possível, posta um exemplo blz ?
Um Abraço e um Feliz Natal pra vc´s todos aeewww
:shock:
To com o mesmo problema que vc resolveu aee pro programalista, só que estou trabalhando com componentes IBO CORE.
Qual o Evento semelhante ao OnReconcileError pro IBO ?
Ele fica na Query ? no Ib_Connection ? No Transaction ?
Se possível, posta um exemplo blz ?
Um Abraço e um Feliz Natal pra vc´s todos aeewww
:shock:
GOSTEI 0
Vinicius2k
15/09/2004
Olá Technos !
Infelizmente, eu acho q vou ficar te ´devendo´ esta... eu não trabalho com o IBO...
Mas veja bem.. Que eu saiba, apenas ClientDataSets e descendentes ou ´primos´, possuem OnReconcileError...
No meu ponto de vista, vc deve utilizar uma rotina semelhante, no Post do seu DataSet, ou no ApplyUpdates do mesmo, se vc estiver trabalhando com CachedUpdates (não sei se no IBO os termos seriam estes)...
No IBX, por exemplo, não seria necessário trabalhar no OnReconcileError... o tratamento poderia ser feito com um bloco try...except no momento do Post.
O próprio método Post dispararia a exceção em caso de erros, coisa que não acontece no ApplyUpdates do ClientDataSet e por isso é necessário ´trabalhar por fora´ no OnReconcileError...
Seria algo mais ou menos assim :
Feliz Natal para vc, e sua família também ! :wink:
T+
Infelizmente, eu acho q vou ficar te ´devendo´ esta... eu não trabalho com o IBO...
Mas veja bem.. Que eu saiba, apenas ClientDataSets e descendentes ou ´primos´, possuem OnReconcileError...
No meu ponto de vista, vc deve utilizar uma rotina semelhante, no Post do seu DataSet, ou no ApplyUpdates do mesmo, se vc estiver trabalhando com CachedUpdates (não sei se no IBO os termos seriam estes)...
No IBX, por exemplo, não seria necessário trabalhar no OnReconcileError... o tratamento poderia ser feito com um bloco try...except no momento do Post.
O próprio método Post dispararia a exceção em caso de erros, coisa que não acontece no ApplyUpdates do ClientDataSet e por isso é necessário ´trabalhar por fora´ no OnReconcileError...
Seria algo mais ou menos assim :
try SeuDataSet.Post; except on E: Exception do begin //aqui dentro o código do exemplo para o OnReconcileError end; end;
Feliz Natal para vc, e sua família também ! :wink:
T+
GOSTEI 0
Vinicius2k
15/09/2004
Lembrei-me de uma coisa...
Talvez seu DataSet tenha o evento OnPostError (ou semelhante)... Se tiver, poderia-se utilizar a mesma rotina que foi utilzada para o OnReconcileError do CDS.
T+
Talvez seu DataSet tenha o evento OnPostError (ou semelhante)... Se tiver, poderia-se utilizar a mesma rotina que foi utilzada para o OnReconcileError do CDS.
T+
GOSTEI 0