Fórum Transações #39988

10/11/2003

0

estou criando um programa com banco de dados interbase.
estou usando em todos os forms o IBDataSet, mas estou com uma dúvida: em que momento se deve chamar o StartTransaction, o Commit e o Rollback. (se é que há a necessidade de chamá-los)
Atualmente eu estou usando post para gravar e quando o form se fecha eu coloco:

try
Commit;
except
Rollback;
end;

esse é o procedimento correto?
pergunto isso porque li num livro que não é bom deixar a transação aberta por muito tempo...

Obrigado pela ajuda!


Delphi32

Delphi32

Responder

Posts

10/11/2003

Afarias

|em que momento se deve chamar o StartTransaction,

Com uso de IBDataSet ou IBQuery -- Nunca! Pois ao abrir o IBDataSet/IBQuery a transação é automaticamente iniciada.


|o Commit e o Rollback. (se é que há a necessidade de chamá-los)

Sim -- COMMIT e ROLLBACK devem sempre ser usados (principalmente o Commit! -- Use o commit sempre q não precisar mais mostrar uma determinada informação (por exemplo:: quando vai fazer uma nova consulta ou quando fechar um determinado cadastro para ir a outros)


|Atualmente eu estou usando post para gravar e quando o form se fecha |eu coloco: {...} esse é o procedimento correto?

humm... +/- ... depende realmente de ´como é´ seu sistema... mas um bloco TRY em um COMMIT com ROLLBACK no Except não tem sentido...

Neste caso vc deveria simplesmente fazer::

if IBTransaction1.InTransaction then
IBTransaction1.Commit;

O Rollback deve ser usado apenas durante transações onde inserindo/alterarndo mais q um registro (caso de mestres/detalhes, atualizações em ´cache´ -- seja como for -- etc.)

em geral, se quer realmente usar o Rollback (mesmo para uma única alteração) seria assim::

try
IBDataSet.Post;
IBDataSet.Transaction.Commit; {ou CommitRetaining}
except
IBDataSet.Transaction.Rollback; {ou RollbackRetaining}
end;

A exceção no caso é do POST e não do COMMIT!


|pergunto isso porque li num livro que não é bom deixar a transação
|aberta por muito tempo...

Correto



T+


Responder

Gostei + 0

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

Aceitar