Fórum Usar try except para tratar Transação com dbexpress. #334579

12/12/2006

0

Olá bom dia colegas.


Estou com um pequeno problema.

Se tento:

begin var Transacao : TTransactionDesc; end; try // aqui tem outros codigos que nao em lembro agora..rs SQLConnection.StartTransaction(transacao); ClientDataset.Post; [b:1b73c8f6e8]ClientDataSet.ApplyUpdates(0);[/b:1b73c8f6e8] SQLConnection.Commit(transacao); except on E: Exception do SQLConnection.Rollback(transacao); showmessage(e.message); end; end; end;


Simplesmente não entra no except mostrando a mensagem de erro.

Agora pergunto o que estou fazendo de errado? Desta maneira nao ´funfa´ mesmo?
:roll:

P.s: o codigo acima é apenas demonstrativo.


Macario

Macario

Responder

Posts

12/12/2006

Martins

Amigo, procure por [b:66ed6a579d]ReconcileError [/b:66ed6a579d] já q vc está usando ClientDataSet.

Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema.

T+


Responder

Gostei + 0

12/12/2006

Macario

Amigo, procure por [b:9c26d2642e]ReconcileError [/b:9c26d2642e] já q vc está usando ClientDataSet. Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema. T+


Olá Martins.

Já fiz uso do OnReconclileError, mas acredite nao foi disparado o evento.


Responder

Gostei + 0

12/12/2006

Martins

[quote:d11d64e043=´Martins´]Amigo, procure por [b:d11d64e043]ReconcileError [/b:d11d64e043] já q vc está usando ClientDataSet. Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema. T+


Olá Martins.

Já fiz uso do OnReconclileError, mas acredite nao foi disparado o evento.[/quote:d11d64e043]

Estranho...


Responder

Gostei + 0

12/12/2006

Macario

[quote:c848776a52=´Macario´][quote:c848776a52=´Martins´]Amigo, procure por [b:c848776a52]ReconcileError [/b:c848776a52] já q vc está usando ClientDataSet. Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema. T+


Olá Martins.

Já fiz uso do OnReconclileError, mas acredite nao foi disparado o evento.[/quote:c848776a52]

Estranho...[/quote:c848776a52]

Muito estranho,

Veja, tambem faço uso do componente madexcept, nem mesmo ele me ´indica´ o erro que ocorre no momento do applyupdates.

ja fiz teste com e sem a utilização do componente, mesmo assim, não estou conseguindo;


Responder

Gostei + 0

12/12/2006

Marco Salles

O clientDataSet não propaga o erro...

Use o [b:433be78f9b]evento[/b:433be78f9b] OnReconcileError do clientDataSet.. Este evento é disparado quando ocorre uma exceção


Responder

Gostei + 0

12/12/2006

Macario

[quote:f4ef8d200b=´Marco Salles´]O clientDataSet não propaga o erro...

Use o [b:f4ef8d200b]evento[/b:f4ef8d200b] OnReconcileError do clientDataSet.. Este evento é disparado quando ocorre uma exceção[/quote:f4ef8d200b]


escreveu: Macario escreveu: Martins escreveu: Amigo, procure por ReconcileError já q vc está usando ClientDataSet. Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema. T+ Olá Martins. Já fiz uso do OnReconclileError, mas acredite nao foi disparado o evento. Estranho...


Up :idea:


Responder

Gostei + 0

12/12/2006

Marco Salles

escreveu: Macario escreveu: Martins escreveu: Amigo, procure por ReconcileError já q vc está usando ClientDataSet. Ele tem um [b:829bbff296]form[/b:829bbff296] q vc pode alterar para manter o mesmo layout do seu sistema.


eu não estou falando de form.. Estou falando do evento... Pode parecer ´estranho´ para alguns , mas existe form pre-definidos de mensagems de erros...
Pensei que fosse deste[b:829bbff296] form [/b:829bbff296]que voces tivessem se referindo...

Ms pelo que tudo indica , voce esta usando o evento onreconcileerror do Cds , e não esta disparando...Mas acho que voce pode usar um flag para isso

var deuerro:Boolealn; try erro:=True; // aqui tem outros codigos que nao em lembro agora..rs SQLConnection.StartTransaction(transacao); ClientDataset.Post; ClientDataSet.ApplyUpdates(0); SQLConnection.Commit(transacao); erro:=False; finally if Deuerro Then on E: Exception do SQLConnection.Rollback(transacao); showmessage(e.message); end; end; end;



Responder

Gostei + 0

12/12/2006

Macario

Ola Marcos.

Seguindo um ´velho´ e otimo exemplo postado pelo [b:ffe5b1dfb7]vinicius2k[/b:ffe5b1dfb7],

eu ja faço uso de um ´flag´ para testar se foi bem sucedido o applyupdates, pois em determinados pontos do sistema tenho mais de 3 tabelas envolvidas.

Então o grande problema é que o ´sitema´ esta me ocultadno o erro.

Não consegui(e não consigo) saber o por que a transação é abortada para poder corrigir o problema.

:roll:


Responder

Gostei + 0

12/12/2006

Macario

Ola Marcos.

Seguindo um ´velho´ e otimo exemplo postado pelo [b:75cb941e05]vinicius2k[/b:75cb941e05],

eu ja faço uso de um ´flag´ para testar se foi bem sucedido o applyupdates, pois em determinados pontos do sistema tenho mais de 3 tabelas envolvidas.

Então o grande problema é que o ´sitema´ esta me ocultadno o erro.

Não consegui(e não consigo) saber o por que a transação é abortada para poder corrigir o problema.

:roll:


Responder

Gostei + 0

12/12/2006

Marco Salles

macario , tb ja passei por esta situação e voce ate mesmo participou do tópico qando ha algum tempo atrás , tive a mesma dúvida e aparentemente o mesmo problema que o seu... Mas no fim , , vouinsistindo com o evento econcileerror do clientedataset que conseguicapturar o erro...
Portanto , faça um teste simples , tire o try exceptt , do seu codigo , forçe um erro (por exemplo uma duplicação de chave primária) e coloque no evento oneconcileerrro uma mensagem qualquer e veja se não é disparado

begin cds.edit; cds.fieldbyname(´campoPrimario´).asinteger:=Valor que ja existe cds.applyupdates(0); end;


No evento escreva:

Showmessage(´Error´);


[b:503d25552c]não aparece esta mensagem[/b:503d25552c] ???????


Responder

Gostei + 0

12/12/2006

Marco Salles

Desculpe moderadores .. Elimine o ultimo post.. A mensagem ficou ´borrada´ . infelismente não posso edita-la :cry: :cry: :cry:

macario , tb ja passei por esta situação e voce ate mesmo participou do tópico qando ha algum tempo atrás , tive a mesma dúvida e aparentemente o mesmo problema que o seu... Mas no fim , foi
insistindo com o evento econcileerror do clientedataset que consegui
capturar o erro...
Portanto , faça um teste simples :
[b:b2e2278849]tire o try exceptt [/b:b2e2278849], do seu codigo , [b:b2e2278849]forçe um erro [/b:b2e2278849](por exemplo uma duplicação de chave primária) e coloque no evento oneconcileerrro uma mensagem qualquer e veja se não é disparado ...

Citação:
begin cds.edit; cds.fieldbyname(´campoPrimario´).asinteger:=Valor que ja existe cds.applyupdates(0); end;


No evento escreva:

Citação:
Showmessage(´Error´);


[b:b2e2278849]não aparece esta mensagem ???????[/b:b2e2278849]


Responder

Gostei + 0

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

Aceitar