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

Responder a