Controle de Transacao
Pessoal utilizo d7 com dbexpress e FB 2, estou usando o seguinte codigo para controlar gravacao em cascata e transaçao, mas aconteceu um erro de gravação e estou precisando da opiniao de vcs quanto ao codigo, gostaria de saber de vcs se estou tratando esse assunto da maneira mais segura possivel. Aconteceu de somente a gravacao ocorrer em uma das tabelas e isso me deixou preocupado. Segue o codigo:
Abs a Todos
xgravacao := False;
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilReadCommitted;
DMC.SQLCon.StartTransaction(Transacao);
if (DM.CdPedidos.ApplyUpdates(0)) = 0 then
if (DM.CdPedidosItens.ApplyUpdates(0)) = 0 then
if (DM.CdPedidosCobr.ApplyUpdates(0)) = 0 then
if (DM.CdVendedores.ApplyUpdates(0)) = 0 then
if (DMPedidos.CdPedidosServer.ApplyUpdates(0)) = 0 then
xgravacao := True;
if (xgravacao) then
DMC.SQLCon.Commit(Transacao)
else
begin
DMC.SQLCon.Rollback(Transacao);
AVISO('ERROR','Ocorreram Erros Durante a Gravação. Os Dados Não Serão Gravados !');
Close;
Exit;
end;
Felipe Ip
Curtidas 0
Respostas
Marcos Iwazaki
12/10/2010
xgravacao := False; Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilReadCommitted;
DMC.SQLCon.StartTransaction(Transacao); try if (DM.CdPedidos.ApplyUpdates(0)) = 0 then
if (DM.CdPedidosItens.ApplyUpdates(0)) = 0 then
if (DM.CdPedidosCobr.ApplyUpdates(0)) = 0 then
if (DM.CdVendedores.ApplyUpdates(0)) = 0 then
if (DMPedidos.CdPedidosServer.ApplyUpdates(0)) = 0 then
xgravacao := True; if (xgravacao) then
DMC.SQLCon.Commit(Transacao)
else
begin
DMC.SQLCon.Rollback(Transacao);
AVISO('ERROR','Ocorreram Erros Durante a Gravação. Os Dados Não Serão Gravados !');
---------- cancelar os updates nos dataset, pois mesmo que aconteceu erro eles ficam em memoria Close;
Exit;
end;
finally DMC.SQLCon.Rollback(Transacao);
AVISO('ERROR','Ocorreram Erros Durante a Gravação. Os Dados Não Serão Gravados !'); ---------- cancelar os updates nos dataset, pois mesmo que aconteceu erro eles ficam em memoria
Close;
Exit;
end;GOSTEI 0
Felipe Ip
12/10/2010
Mas estao a parte do rollback fica nas 2 partes do codigo ? Dentro do Try e fora ?
Abs
GOSTEI 0