Transações
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!
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
Curtidas 0
Respostas
Afarias
10/11/2003
|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+
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+
GOSTEI 0