Fórum Como fazer o correto procedimento - Commit no Delphi 2010 #442741

13/05/2013

0

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

Responder

Posts

22/05/2013

Fernando

Alguém?
Responder

Gostei + 0

22/05/2013

Joel Rodrigues

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.
Responder

Gostei + 0

22/05/2013

Alisson Santos

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar