Transação Delphi x Zeos x Mysql

Delphi

15/10/2009

Estou com um problema em um cliente que acontece da seguinte maneira:

Try
DM.Conexao.StartTransaction;
except
Erro:= True;
end;

if not Erro then
GravaVenda; //---procedure Gravando as Vendas
if not Erro then
GravaItensVenda; //---procedure Gravando os Itens da Venda

if Erro then
begin
//---------------Se der algum erro
DM.Conexao.Rollback;
end
else
begin
//------------------Se estiver tudo OK
DM.Conexao.Commit;
end;

Simplismente não grava algumas vendas....aleatório....

Alguem pode me ajudar pelo amor de deus


Gustavo Montagnoli

Gustavo Montagnoli

Curtidas 0

Respostas

Afarias

Afarias

15/10/2009

Com as informações apresentadas não da pra saber o q está errado, mas dá pra ver que vc está usando mal o recurso de try...except.

Vc deveria começar mudando seu código para algo assim:


DM.Conexao.StartTransaction;
try 
  GravaVenda;
  GravaItensVenda;
  DM.Conexao.Commit;
except
  DM.Conexao.Rollback; 
end;



T+


GOSTEI 0
Afarias

Afarias

15/10/2009

complementando, para saber q houve um erro, depois do Rollback vc pode por uma mensagem ou (re)lançar a exceção:

{...}
DM.Conexao.Rollback;
raise;
{...}


ou

{...}
DM.Conexao.Rollback;
ShowMessage(´Erro ao gravar´);
{...}


T+


GOSTEI 0
Gustavo Montagnoli

Gustavo Montagnoli

15/10/2009

Valeu vou tentar...qq coisa grito de novo ok....


GOSTEI 0
POSTAR