Luciano descobri uma coisa estranha, se a propriedade GetMetaData do SQLDataSet estiver como True, ele comita a transação, se tiver como false isso não acontece, se você verificar uma das diferenças do SQLDataSet e SQLQuery é que no dataset o padrão da propriedade GetMetaData é True e na query é false, tenta passar pra false e faz um teste.
No meu caso eu configurei o GetMetaData pra false, parou de dar o problema que estou tendo, mas de uma hora pra outra sem alteração alguma passou a gerar o problema novamente muito doido. Faz um teste simples, configure uma conexão, inicia uma transação com o GetMetaData = True, e no meio da transação da um open em um ClientDataSet veja que o erro ocorre, se fizer o mesmo teste com GetMetaData = False, já não gera o erro. At. Ricardo Lima Dalan Silveira escreveu: > > > O problema é que os componentes nativos do delphi estão ultrapassados, eu > recomendo vc procurar uma suite de componentes de conexão de terceiros, aí > sim, vc terá um resultado muito melhor. > > Lembre-se, o banco de dados evolui e é atualizado praticamente todos os > dias, a framework também tem q ter atualizações. > > 2009/8/14 Ricardo Lima <rlma...@gmail.com <mailto:rlmariz%40gmail.com>> > > > > > > > Estou com um problema chato aqui, no Delphi algumas coisas que é o > > trivial não funciona. > > > > Tenho esse trecho de código abaixo, tenho que alterar varias tabelas e > > faz tudo dentro de uma transação. > > > > > > StartTransaction; > > Try > > > > Apply_Update(cdsRecebimentos); > > Apply_Update(cdsMovimentacaoContas); > > LancaVinculosMovimentoContas; > > Apply_Update(cdsRecebimentos); > > Apply_Update(cdsMovimentoContas); > > Apply_Update(cdsCadastro); > > > > cdsCadastro.First; > > While Not cdsCadastro.Eof Do > > Begin > > >>>>Arqui onde gera o erro, tenho uma classe(DataModele) que > > responsavel por carregar as informações fazer alterações e gravar, porem > > no Open do dataset gera o erro > > if cdsCadastroVALOR_TOTAL_DEVIDO.AsFloat <> > > cdsCadastroVALOR_TOTAL_DEVIDO_ANTERIOR.AsFloat Then > > begin > > With > > > > > AbreContasReceberDam(cdsCadastro.FieldByName('COD_CONTA_RECEBER').AsInteger, > > > > cdsCadastro.FieldByName('COD_EMP_CONTA_RECEBER_CAD').AsInteger) Do > > //NESSE PONTO DA O ERRO > > Try > > DoGravar; > > Finally > > DataModule.Free; > > End; > > end; > > cdsCadastro.Next; > > End; > > > > CommitTransaction; > > Except > > On E: Exception Do > > Begin > > If dtmConexao.connConexao.InTransaction Then > > RollBackTransaction; > > Raise > > End; > > end; > > end; > > > > Porem não posso abrir um ClientDataSet no meio de uma transação que gera > > essa exception > > "Não é possível criar uma nova conexão porque o modo usado é o de > > transação manual ou distribuída" > > > > É uma coisa tão básica e no Delphi não funciona, desanimador isso. > > > > Alguem tem alguma luz do por que isso esta ocorrendo. > > > > Obrigado. > > > > At. > > Ricardo Lima > > > > -- > > Estou utilizando a versão gratuita de SPAMfighter para usuários > privados. > > Foi removido 5225 emails de spam até hoje. > > Os usuários pagantes não têm esta mensagem nos seus emails. > > Adquira SPAMfighter grátis aqui: http://www.spamfighter.com/lpt > <http://www.spamfighter.com/lpt> > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > -- Estou utilizando a versão gratuita de SPAMfighter para usuários privados. Foi removido 5226 emails de spam até hoje. Os usuários pagantes não têm esta mensagem nos seus emails. Adquira SPAMfighter grátis aqui: http://www.spamfighter.com/lpt