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

Danilo Miranda danilomibr em gmail.com
Sex Maio 7 09:33:43 -03 2010


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

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

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

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

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

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


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


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


Abraços


Danilo Miranda <http://www.danilomiranda.com.br>



Mais detalhes sobre a lista de discussão lista