Fórum Tratar mensagens de erro #250536

15/09/2004

0

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.


Programalista

Programalista

Responder

Posts

15/09/2004

Vinicius2k

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 :
...
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+


Responder

Gostei + 0

15/09/2004

Programalista

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.


Responder

Gostei + 0

22/12/2004

Technos

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:


Responder

Gostei + 0

22/12/2004

Vinicius2k

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 :
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+


Responder

Gostei + 0

22/12/2004

Vinicius2k

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+


Responder

Gostei + 0

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

Aceitar