PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Estrutura Try-Except - O que pode estar errado? #224079

02/04/2004

0

Boa tarde companheiros....
Vejam se podem me ajudar....

Estou fazendo um isolamento transacional na hora de dar o applyupdates no banco. A estrutura está funcionando corretamente, inclusive soltando a mensagem em portugues que coloquei, utilizando a estrutura If-Else, vejam:

******* Isolamento do applyupdate(0) em Estrutura If-Else
var
TransDesc : TTransactionDesc;
begin
TransDesc.TransactionID := 1;
TransDesc.IsolationLevel := xilREADCOMMITTED;
dtmDados.Conexao.StartTransaction(TransDesc);
If DataSetA.ApplyUpdates(0) = 0 then
dtmDados.Conexao.Commit(TransDesc)
Else
Begin
dtmDados.Conexao.Rollback(TransDesc);
ShowMessage(´Ocorreram problemas na gravação dos dados!
Abort;
End;
end;
******* Fim do Isolamento do applyupdate(0) em Estrutura If-Else

Da forma como está acima funciona corretamente, mas se na hora do applyupdates(0) acontecer um erro nas gravações, sai uma mensagem em português que coloquei. MAS NÃO SEI QUAL FOI O ERRO QUE O BANCO(Firebird) GEROU. Então preciso da mensagem que o banco solta para identificar o erro, se acontecer para fazer as correções.

Sei que usando a estrutura Try-Except o banco me retorna a exceção que ocorreu, e é o que preciso!. Então para adaptar o isolamento a estrutura Try-Excep fiz o seguinte:

******* Isolamento do applyupdate(0) em Estrutura Try-Except
var
TransDesc : TTransactionDesc;
begin
Try
TransDesc.TransactionID := 1;
TransDesc.IsolationLevel := xilREADCOMMITTED;
dtmDados.Conexao.StartTransaction(TransDesc);
If DataSetA.ApplyUpdates(0) = 0 then
dtmDados.Conexao.Commit(TransDesc)
Except
on Exc:Exception do
begin
SQLConnection1.Rollback(Transacao);
ShowMessage(´Ocorreram problemas na gravação dos dados!
end;
end;
******* Fim do Isolamento do applyupdate(0) em Estrutura Try-Except


A estrutura que preciso deve ser próxima a esta (Try-Except), acontece que desta forma, o banco não solta a mensagem em inglês informando qual foi a exceção. Na verdade nem a minha mensagem em portugues sai. O applyupdates(0) não é concluido, portanto o commit não é executado, mas não aparece nenhuma mensagem ao usuario que deu erro.
Então parece que o cadastro foi concluido, mas não foi!!!!

Se alguém puder me ajudar a trabalhar melhor esta estrutura Try-Except ficaria muito grato.


Obs: Para acontecer o erro estou manipulando um cadastro de um codigo(chave estrangeira) que não existe na tabela relacionada. Rodando pelo delphi a mensagem de erro aparece e fica claro que foi relacionada a Foreign key, mas quando rodo por fora do delphi, não aparece nenhuma mensagem de erro. Aos olhos do usuário, parece ue o cadastro foi concluido, pque não sai nenhuma mensagem de erro, mas na verdade não foi.

Um grande abraço a todos..
pablo - Marília/SP


Pablo_lima

Pablo_lima

Responder

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

Aceitar