Como fazer o correto procedimento - Commit no Delphi 2010
amigos,
Uso delphi 2010 + Firebird 2.5 + DBExpress.
Gostaria de saber qual a correta forma de usar a rotina de commit/rollback. Uso assim:
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.
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
Curtidas 0
Respostas
Fernando
13/05/2013
Alguém?
GOSTEI 0
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:
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.
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
13/05/2013
Amigo verifique se a resposta deu certo, caso não nos informar ok que tenho uma outra solução.
GOSTEI 0