SQLConnection1.Rollback(Transacao); mas não desfaz as alt.

Delphi

24/07/2007

procedure TfrmProducao_faturar_pg.btnFaturarClick(Sender: TObject);
var
  Transacao: TTransactionDesc;
  TudoOk: Boolean;

  crd_garrafao: Integer;
begin
  // Iniciando a transação
  TudoOk := false;
  Transacao.TransactionID := dm.GeraIDTrans;
  Transacao.IsolationLevel := xilReadCommitted;
  dm.Conexao.StartTransaction(Transacao);

  // Verificando créditos de garrafões
  crd_garrafao :=  cds.FieldByName(´credito´).AsInteger*-1;
  crd_garrafao :=  crd_garrafao+(cds.FieldByName(´qtde_vasilhame´).AsInteger - cds.FieldByName(´qtde_total´).AsInteger);
  if crd_garrafao <> 0 then
  begin
    crd_garrafao := dm.CrdClienteAdd(cds.FieldByName(´id_cliente´).AsInteger, cds.FieldByName(´id_produto´).AsInteger, crd_garrafao);
    sqlCrdAdd.Close;
    sqlCrdAdd.ParamByName(´qtde´).AsInteger := crd_garrafao;
    sqlCrdAdd.ParamByName(´cliente´).AsInteger := cds.FieldByName(´id_cliente´).AsInteger;
    sqlCrdAdd.ParamByName(´produto´).AsInteger := cds.FieldByName(´id_produto´).AsInteger;
    sqlCrdAdd.ExecSQL;
  end;

  // Se tudo ok aplicar Commit
  if TudoOk then
  begin
    dm.Conexao.Commit(Transacao);
    close;
  end
  else
  begin
    dm.Conexao.Rollback(Transacao);
    showmessage(´erros´);
  end;  
end;


atualmente estou deixando a variavel tudook como false.
ele diz q fez o rollback, mas qd eu olho no banco de dados as alterações feitas na tabela clientes_creditos elas ainda estão lá.


Orlando Frade

Orlando Frade

Curtidas 0

Respostas

Orlando Frade

Orlando Frade

24/07/2007

sobe


GOSTEI 0
Gandalf.nho

Gandalf.nho

24/07/2007

Qual o banco de dados e os componentes usados?


GOSTEI 0
Otto

Otto

24/07/2007

voce iniciou o TudoOk como false.

depois faz as alterações e pergunta se TudoOk é igual a true.

onde ta o tratamento try except?


GOSTEI 0
Fabiano Góes

Fabiano Góes

24/07/2007

procedure TfrmProducao_faturar_pg.btnFaturarClick(Sender: TObject);
var
  Transacao: TTransactionDesc;
  TudoOk: Boolean;

  crd_garrafao: Integer;
begin
  // Iniciando a transação
  Transacao.TransactionID := dm.GeraIDTrans;
  Transacao.IsolationLevel := xilReadCommitted;
  dm.Conexao.StartTransaction(Transacao);

  // Verificando créditos de garrafões
  crd_garrafao :=  cds.FieldByName(´credito´).AsInteger*-1;
  crd_garrafao :=  crd_garrafao+(cds.FieldByName(´qtde_vasilhame´).AsInteger - cds.FieldByName(´qtde_total´).AsInteger);
  if crd_garrafao <> 0 then
  begin
    crd_garrafao := dm.CrdClienteAdd(cds.FieldByName(´id_cliente´).AsInteger, cds.FieldByName(´id_produto´).AsInteger, crd_garrafao);
    sqlCrdAdd.Close;
    sqlCrdAdd.ParamByName(´qtde´).AsInteger := crd_garrafao;
    sqlCrdAdd.ParamByName(´cliente´).AsInteger := cds.FieldByName(´id_cliente´).AsInteger;
    sqlCrdAdd.ParamByName(´produto´).AsInteger := cds.FieldByName(´id_produto´).AsInteger;

    //  aqui eu alterei o código  
    try
       sqlCrdAdd.ExecSQL;
       TudoOk := True;
    except
      TudoOk := False;
    end;    
  end;

  // Se tudo ok aplicar Commit
  if TudoOk then
  begin
    dm.Conexao.Commit(Transacao);
    close;
  end
  else
  begin
    dm.Conexao.Rollback(Transacao);
    showmessage(´erros´);
  end; 
end;


fiz uma alteração no seu código, testa assim pra ver se funciona.
abraço !!!


GOSTEI 0
POSTAR