[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