Controle de Transacao

Delphi

12/10/2010

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:  
 
  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;

 

    Abs a Todos
Felipe Ip

Felipe Ip

Curtidas 0

Respostas

Marcos Iwazaki

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

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
POSTAR