PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Transações com ADOConn + ClientDataSet #131195

26/03/2010

0

Geralmente não utilizo ADO, mas estou usando ADO com conexão ODBC para o MySQL 5.1. Tudo funciona OK, exceto por um problema de Rollback vs ClientDataSet...   Tenho uma conexão ADO (ADOConn, e algumas Queries ligadas ao ADOCOnn, e nestas queries clientDataSets e tenho as seguintes operações em resumo:   open dos client data sets ....   .... teste de transação usando ADO:   try
   ADOConn.BeginTrans;
   //Deleta records,     cds1.Delete;
   cds2.Delete;    //ApplyUpdates...
   if cds1.ChangeCount > 0  then
   if cds1.ApplyUpdates(0) <> 0 then //OK !!! Record foi deletado do client dataset e Apply passou
      raise Exception.Create('Erro ....');      //Forço aqui um erro depois do primeiro ApplyUpdates para entrar no rollback de propósito   raise Exception.Create('Erro para teste....');  //Força ir para except       if cds2.ChangeCount > 0  then
   if cds2.ApplyUpdates(0) <> 0 then       raise Exception.Create('Erro ....'); 
   //
   ADOConn.CommitTrans;  OK !!!
  except
  on E:Exception do
    begin
    ADOConn.RollbackTrans; OK !!! Continua tudo certinho no banco de dados     ShowMessage(IntToStr(cds1.ChangeCount)); //Está com valor zero !? mas não devia ter revertido o Apply ? Estou tendo que restaurar o client data set de outra forma ...
    //Reverte records dos client data sets
    cds1.CancelUpdates;  //Mas ==> Registro que foi deletado do CDS1 não volta no ClientDataset !?
    ShowMessage(IntToStr(cds1.ChangeCount)); //Está com valor zero !?     Exit;
    end;
  end;   O rollback funciona certinho no Banco de dados, por causa do rollback, o registro do ClientDataSet1 que foi deletado não foi efetivado no banco de dados... OK Porém, o ClientDataSet1 não retorna o status do delete pendente !? Um jeito que tenho para resolver é fazendo o refresh novamente no client data set, e fazendo o delete novamente, mas isso é um bug ? Será que há algo errado ? Tenho a mesma situação em outro programa só que usando componentes Zeos, mas o client Data Set é restaurado e aqui não, trabalho com isso já faz um tempão... mas talvez eu não esteja vendo algo...   Roberto    
Roberto Novakosky

Roberto Novakosky

Responder

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

Aceitar