[firebase-br] Problemas com perda de dados

Campus campus em sinos.net
Qua Jun 27 17:26:32 -03 2007


Magno, no meu entender o Zeos tem um bug, não olhei as outras versões. eu
tenho a 6.1.5.

Tu só consegue usar o StartTransaction se o AutoCommit estiver true, bem
esse não é o problema, uma vez que o StartTransaction do Zeos não starta
nada, a não ser passar o AutoCommmit para False, e incrementar a variavel
FExplicitTransactionCounter.

Dessa forma (AutoCommit=False) é possível chamar o método Commit do
componente ZConnection, esse então, chama o commit do protocolo em uso
(IB/FB/mySQL).

O Bug está na parte do commit do ZConnection, que só é chamado se a variavel
FExplicitTransactionCounter for menor que 2 (dois), segundo os comentários
do autor, se for 0 (zero) o AutoCommit foi setado como False, e se for 1
(um), o StartTransaction foi usado explicitamente.

Porém durante o StartTransaction, o conteúdo da variavel não é testada, e se
já contiver o valor  1 (um), ela será incrementada para 2 (dois), uma vez
que o commit só é efetuado se ela for menor que 2 (dois), è durante o Commit
que o AutoCommit é setado como True novamente.

Bom, quando o método ZConnection1.Disconnect for chamado, um RollBack é
efetuado, pois o AutoCommit vai estar False, e o "hard" Commit só é
efetuado, se o AutoComiit tiver true.

Isso pode acontecer se vc chamar o StartTransaction duas vezes, por engano,
erro de projeto, ou ainda se o commit falhar por erro interno (memória,
windows etc...)

A solução é simples, basta colocar um teste no incremento da variável
FExplicitTransactionCounter, se ela já estiver valendo 1, é pq já existe uma
transação explicita em andamento.

----- Original Message ----- 
From: "Magno System" <magno em speet.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Friday, June 15, 2007 5:28 PM
Subject: Re: [firebase-br] Problemas com perda de dados


Em se tratando do autocommit do zeos, realmente ele pode estar dando um
softcommit(?) como o Eduardo disse. Mas o autocommit, eu só uso em inclusão,
alteração ou deleção de registros em cadastros. Operações mais complexas, eu
uso o controle de transação explícita, ou seja, uso os comandos
starttransaction e commit. E nessas operações, mesmo com controle explícito
de transação, houve perda de dados. Daí a idéia de migrar para o dbx, o que
até agora tem dado resultado.


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


-- 
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.472 / Virus Database: 269.8.17/850 - Release Date: 15/06/2007
11:31






Mais detalhes sobre a lista de discussão lista