[firebase-br] MDO funciona com GDS32.DLL????

Daniel / Tecnobyte temp em tecnobyte.com.br
Qui Dez 23 15:44:50 -03 2004


> Errado de novo, até no quisito em ler sobre transações, já li e muito, mas
é
> claro q sempre devemos estar abertos a aprender, mas vamos lá.
> Se vc começou uma transação e não "commitou" ou não deu um "rollback"
nela,
> ela ficaria no limbo e sendo assim o processo é de não concretizar a
> transação, ou seja, a não confirmação dos dados.
> Eu testei com o Rollback do jeito q vc sujeriou para ver como se
comportava
> nesta situação e fez extamente do mesmo jeito, dai testei com o IBX e ele
se
> portou da maneira correta (msm sem o rollback no except), ou seja, não
> comitou a primeira inserção, pois o raciocínio é como falei anteriormente.
O
> problema é q vc está olhando a coisa a nível de programação final e eu
estou
> olhando a nível de componente (obrigado meu amigo Thiago), por isso vc não
> está me compreendendo, agora se quer compreender eu te faço a msm
> recomendação q vc me fez, leia bastante sobre como as coisas acontecem nos
> bastidores q vc vai entender ;)
> t+
>
> Jean Richard Lima
> Analista de Sistema

Até certo ponto eu concordo com sua explicação, mas observe que:

1. Se você usar o mesmo componente MDOTransaction em outros pontos de seu
programa, fazendo desta forma sua (sem rollback) você corre o risco de
posteriormente executar um commit em outra rotina (ou o MDO fazer isto
automaticamente dependendo de alguma configuração), o que fatalmente
confirmaria a pendência deixada na rotina anterior.

2. Bancos de dados (incluindo o Firebird) geralmente se apoiam no princípio
de que toda transação deve ser confirmada ou cancelada. Naturalmente existem
mecanismos para limpar transações deixadas sem conclusão (sem commit e sem
rollback), mas não acredito que seja recomendável deixar transações desta
forma. Entendo que este recurso existe para corrigir falhas que
eventualmente possam ocorrer devido a problemas de rede, etc e tal.

Meu ponto de vista (e de muitos outros) é que uma transação deve ser
processada assim:

1. Iniciar transação.
2. Executa comandos SQL.
3. Se não ocorreu nenhum erro, então confirme a transação.
4. Se ocorreu algum erro, então cancele a transação.

Em Delphi isto seria:

IniciaTransacao;
try
  ExecutaSQL;
  ConfirmaTransacao;
except
  CancelaTransacao;
  raise;
end;

Atenciosamente.

Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br





Mais detalhes sobre a lista de discussão lista