[firebase-br] DBXpress não faz commit no Firebird

Carlos H. Cantu listas em warmboot.com.br
Sex Maio 7 09:53:46 -03 2010


O problema não deve ser do Firebird não.

Vc faz o controle explícito de transações de manipulação dos dados,
igual está fazendo para o log?

Eu arriscaria dizer que o driver está mantendo a transação aberta por todo esse
tempo, e no final não está comitando.

Vc pode usar um monitor do tipo fbscanner ou sinatica para saber como
está o comportamento das transações no banco, acho que vc deveria
começar por aí.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

DM> Bom dia!
DM> Temos uma aplicação desenvolvida com Delphi 2007 utilizando o DBXpress +
DM> Driver CoreLab para Firebird (FB 2.1).

DM> Utilizamos o trio TSQLDataSet, TDataSetProvider e TClientDataSet... no
DM> TSQLDataSet temos um select parecido com este:
DM> Select * from TABELA1 where ID_TABELA1 = xxxxx

DM> Nesta tabela, fazemos inserções, exclusões, edições, utilizando os métodos
DM> Insert, Delete, Update do ClientDataSet e após uma destas operações damos o
DM> APPLYUPDATES(0).

DM> Por algum motivo que não sabemos o qual e acontece só de vez em quando, o
DM> usuário que está trabalhando (ele abre o sistema no começo do dia,
DM> consequentemente abre a conexão com o banco e esta permanesse aberta até que
DM> o programa seja fechado) faz as diversas alterações nesta tabela. Ele pode
DM> fechar a tela, abrir a tela (só a tela, não o sistema) e as alterações que
DM> ele fez estão lá...
DM> Quando ele fecha o sistema (conexão) e abre novamente todas as alterações
DM> que ele realizou foram perdidas. Simplesmente não foi dado o APPLYUPDATE(0)
DM> no banco.

DM> Um detalhe talvez importante, o ID_TABELA1 é um auto incremento através de
DM> uma trigger e um Generator.. o generator Salta direitinho a numeração, como
DM> se o registro tivesse sido inserido, porém o registro não existe.

DM> Um outro detalhe importante, logamos estas alterações através de eventos do
DM> TDataSetProvider, executando um
DM> var
DM> td: TDBXTransaction;
DM> begin
DM> td := Inicia transação;
DM> cnnConexao.ExecuteDirect('insert blabalbal');
DM> cnnConexao.CommitFreeAndNil(td);
DM> end;
DM> Este log está no banco de dados, mas as alterações não estão...


DM> Isto pode ser um problema do Firebird, do Delphi(DBXpress) ou do Driver da
DM> CoreLab? E qual a melhor maneira de solucioná-lo?


DM> O problema maior, é que até agora não conseguimos reproduzir o erro em
DM> ambiente de testes, apenas o cliente que reclama que ele às vezes altera e
DM> não aparece...


DM> Abraços


DM> Danilo Miranda <http://www.danilomiranda.com.br>
DM> ______________________________________________
DM> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
DM> Para saber como gerenciar/excluir seu cadastro na lista, use:
DM> http://www.firebase.com.br/fb/artigo.php?id=1107
DM> Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista