Como fazer o correto procedimento - Commit no Delphi 2010

Delphi

13/05/2013

amigos,

Uso delphi 2010 + Firebird 2.5 + DBExpress.
Gostaria de saber qual a correta forma de usar a rotina de commit/rollback. Uso assim:
    try
      transacao:=dmCon.sqlCon.BeginTransaction(TDBXIsolations.ReadCommitted);
      SPGrava.ExecProc;
      dmCon.sqlCon.CommitFreeAndNil(Transacao);
    except
      dmCon.sqlCon.RollBackFreeAndNil(Transacao);
    end;


Só que num certo momento, o componente SPGrava (ligada a uma procedure no banco) deu erro, e ao executar o comando "RollBackFreeAndNil" deu "invalid object Transaction" ou algo do tipo... Só funcionou quando com o comando "RollbackIncompleteFreeAndNil", no except;

Queria saber se sempre posso usar RollbackIncompleteFreeAndNil em vez de CommitFreeAndNil. Ou qual a diferença entre eles.
Grato.
Fernando

Fernando

Curtidas 0

Respostas

Fernando

Fernando

13/05/2013

Alguém?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

13/05/2013

Vamos lá. Uma transação é composta basicamente por um par de ações diretas: BEGIN+COMMIT ou BEGIN+ROLLBACK:

Begin: inicia a transação, como você deve imaginar;
Commit: grava os dados da transação, ou seja, persiste as alterações que foram feitas durante a transação;
Rollback: desfaz a transação, não persistindo as alterações que foram feitas.

Essa forma que você organizou o código, ao meu ver, está correta. Analise a sequência:

TRY
---> inicie a transação
---> execute as alterações no banco (SPGrava...)
---> grave as alterações da transação
EXCEPT
---> desfaça a transação
END

Ou seja, se tudo correr bem, a seguinte sequência será seguida: INICIA > FAZ ALTERAÇÕES > GRAVA.
Porém, caso algo dê errado, é preciso desfazer a transação, então você cai no bloco EXCEPT e a sequência será a seguinte:
INICIA > FAZ ALTERAÇÕES (DEU ERRO) > DESFAZ ALTERAÇÕES/TRANSAÇÃO.

Deu pra pegar a ideia? Caso persista a dúvida, é só falar.
GOSTEI 0
Alisson Santos

Alisson Santos

13/05/2013

Amigo verifique se a resposta deu certo, caso não nos informar ok que tenho uma outra solução.
GOSTEI 0
POSTAR