Transação Delphi x Zeos x Mysql
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
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
Curtidas 0
Respostas
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:
T+
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
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+
{...}
DM.Conexao.Rollback;
raise;
{...}
ou
{...}
DM.Conexao.Rollback;
ShowMessage(´Erro ao gravar´);
{...}
T+
GOSTEI 0
Gustavo Montagnoli
15/10/2009
Valeu vou tentar...qq coisa grito de novo ok....
GOSTEI 0