GARANTIR DESCONTO

Fórum Problemas com ADO: Não está efetivando transação #286571

30/06/2005

0

Caros companheiros de programação!
É a primeira vez que participo deste fórum para pedir ajuda. :wink:

Eu estou trabalhando com Deplhi 5, BD SQL Server e usando ADO p/ a conexão c/ o BD.

O problema é o seguinte: quando inicio uma transação(BeginTrans) no AdoConnection(onde mais?), faço as modificações e dou um CommitTrans, a primeira vista na aplicação parece que gravou tudo ok, mas no servidor não aparece nenhuma modificação, é como se não tivesse feito nada ou tivesse dado um RollbackTrans.

Desde já agradeço a colaboração de vocês, e peço por favor que me ajudem(se puderem)! [b:723802b085]URGENTE! :!: [/b:723802b085]

Obrigado.

[color=green:723802b085]Título editado por gandalf.nho. Removido URGENTE![/color:723802b085]


Rogick

Rogick

Responder

Posts

01/07/2005

Rjun

Coloque o trecho de código onde você faz a operação com o BD. Você está utilizando stored procedure?


Responder

Gostei + 0

01/07/2005

Rogick

Valeu pela atenção.

Eu já consegui resolver parte do problema, o Commit está funcionando. eeehh! :D
Eu só mudei o cursor location do ADOConnection p/ clUseServer

Agora a outra parte do problema.

Primeiro vou explicar o que eu estou fazendo:
Eu estou usando 2 TADOQueries(CursorLocation = clUseClient) para fazer a gravação e algumas tabelas e executando algumas stored procedures via query. Até aí tá tudo bem, ele grava certinho, mas acontece que eu preciso pegar os dados com outra TADOQuery ligada ao mesmo ADOCOnnection de uma inserção que fiz(ainda dentro da transação) para o usuário fazer umas alterações em outra tela para depois fazer a gravação definiva, e ele não consegue pegar.

E agora? É o fim ...

E também tem outra, se eu colocar o CursorLocation de todo mundo p/ clUseServer ele dá o erro ´A new transaction could not be created due unspecified capacity issue´ + ou - ´Uma nova transação não pode ser criada devido a edição de capacidade não especificada´

Se alguém sober como resolver, por favor me ajude.

Desde já agradeço pela atenção.

PS: Não vou enviar o código, pq ele é muito extenso e envolve + d um form


Responder

Gostei + 0

01/07/2005

Paullsoftware

eu uso Access e nunca aconteceu isso comigo... faz o seguinte pode ser que te ajude, coloca esse código nos eventos affterDelete,AffterPost do componente TADO...
        if not conexao.InTransaction then
         conexao.BeginTrans;
          try
           if conexao.InTransaction then
            conexao.CommitTrans
             except
              if conexao.InTransaction then
               conexao.RollbackTrans;
                end;

outra coisa, esse erro pode ser devido a alguma referencia circular que esteja acontecendo no seu banco, pq o ideal é que use em todos componentes o [b:935abe30f2]CursorLocation = clUseServer[/b:935abe30f2], pois, essa propriedade serve para defenir se os dados serão manipulados diretamente no servidor ou no cliente... mesmo se for um banco local o ideal é usar como clUseServer...

espero ter ajudado!!! :wink:


Responder

Gostei + 0

01/07/2005

Bon Jovi

´pq o ideal é que use em todos componentes o CursorLocation = clUseServer´

Depende do caso, clUseServer é bom ser usado em situações de processamento temporário, em que o DataSet não fique aberto pro usuário (com ClientDataSet até pode nao ter problemas, pois usa o ADODataSet/ADOQuery temporariamente/qdo necessário. Mesmo assim prefiro clUseClient com ClientDataSet).

clUseServer gera mais tráfego na rede se deixar o dataset pro usuário brincar, onde a cada navageção no DataSet ele sempre vai acessar a rede. O dataset fica sempre ´ligadão´ no servidor.

clUseClient já traz a query solicitada toda pra um cache local, liberando o servidor de uma vez só. Manter a aplicação ´linkada´ ao servidor o tempo todo não é uma boa pra aplicações Client/Server com muita concorrência.

Exemplos:

Pra obter total velocidade em processamentos manuais, onde se garanta o fechamento do DataSet antes de liberar o resultado pro usuário, acho ideal usar CursorLocation = clUseServer + CursorType = ctOpenForwardOnly.

Pra exibir dados em DBGrids e previews de relatórios acho o ideal é CursorLocation = clUseClient + CursorType = ctStatic. De preferência, é claro, com ClientDataSet.

Existem tb outras situações em que um é mais adequado usar um ou outro..., tudo vai depender da situação.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar