SQLConnection1.Rollback(Transacao); mas não desfaz as alt.
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
Curtidas 0
Respostas
Orlando Frade
24/07/2007
sobe
GOSTEI 0
Gandalf.nho
24/07/2007
Qual o banco de dados e os componentes usados?
GOSTEI 0
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?
depois faz as alterações e pergunta se TudoOk é igual a true.
onde ta o tratamento try except?
GOSTEI 0
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