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

Francisco Thiago de Almeida jeandeadlucky em yahoo.com.br
Qui Dez 23 15:56:43 -03 2004


Mas Daniel o ponto mais importante da mensagem do Jean você esqueceu de ler:

>> o problema é q vc está olhando a coisa a nível de programação final e eu 
>> estou olhando a nível de componente

Quando ele está falando do tratamento interno que o programa está dando ao 
erro sacou? Ele não está dizendo que a forma do Try Commit Excep Rollback é 
errada.


----- Original Message ----- 
From: "Daniel / Tecnobyte" <temp em tecnobyte.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, December 23, 2004 3:44 PM
Subject: Re: Re: Re: Re: Re: [firebase-br] MDO funciona com GDS32.DLL????


> 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


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br


-- 
No virus found in this incoming message.
Checked by AVG Anti-Virus.
Version: 7.0.298 / Virus Database: 265.6.4 - Release Date: 22/12/2004




-- 
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.298 / Virus Database: 265.6.4 - Release Date: 22/12/2004





Mais detalhes sobre a lista de discussão lista