Usar try except para tratar Transação com dbexpress.
Olá bom dia colegas.
Estou com um pequeno problema.
Se tento:
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.
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
Curtidas 0
Respostas
Martins
12/12/2006
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+
Ele tem um form q vc pode alterar para manter o mesmo layout do seu sistema.
T+
GOSTEI 0
Macario
12/12/2006
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.
GOSTEI 0
Martins
12/12/2006
[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...
GOSTEI 0
Macario
12/12/2006
[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;
GOSTEI 0
Marco Salles
12/12/2006
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
Use o [b:433be78f9b]evento[/b:433be78f9b] OnReconcileError do clientDataSet.. Este evento é disparado quando ocorre uma exceção
GOSTEI 0
Macario
12/12/2006
[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]
Up :idea:
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:
GOSTEI 0
Marco Salles
12/12/2006
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;
GOSTEI 0
Macario
12/12/2006
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:
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:
GOSTEI 0
Macario
12/12/2006
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:
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:
GOSTEI 0
Marco Salles
12/12/2006
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
No evento escreva:
[b:503d25552c]não aparece esta mensagem[/b:503d25552c] ???????
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] ???????
GOSTEI 0
Marco Salles
12/12/2006
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:
No evento escreva:
Citação:
[b:b2e2278849]não aparece esta mensagem ???????[/b:b2e2278849]
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]
GOSTEI 0