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

Danilo Miranda danilomibr em gmail.com
Sex Maio 7 12:27:32 -03 2010


Olá Cantu.

Eu não faço o controle Explícito das transações igual eu estou fazendo no
log, estou deixando por conta do ApplyUpdates(0). Você acha que é importante
fazer este controle também nestas manipulações de dados?

Em que momento eu inicio a transação e faço o commit? Antes de dar o
cdsDataSet.Insert, e commito após o cdsDataSet.ApplyUpdates(0)?
Ou posso abrir a transação antes de dar o applyupdates(0) e commito após o
applyUpdates(0)?

Como eu mencionei anteriormente, é um erro que acontece muito de vez em
quando, mas que causa uma grande dor de cabeça... Com estas ferramentas que
citou, eu conseguiria detectar alguma coisa (mesmo não conseguindo
reproduzir o erro?)


Abraços e obrigado pela resposta.
Danilo Miranda


Em 7 de maio de 2010 09:53, Carlos H. Cantu <listas em warmboot.com.br>escreveu:

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



-- 
Atenciosamente

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



Mais detalhes sobre a lista de discussão lista