Transações com ADOConn + ClientDataSet

Delphi

26/03/2010

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

Curtidas 0
POSTAR