Rotina Transação ADO

Delphi

16/04/2011

Olá, tenho a seguinte dúvida quanto a utilização do ADO em uma transação:   Exemplo 1:     DataModule.ADOConnection1.BeginTrans;
  try
   DataModule.ADOQueryCLIENTE.Close;
   DataModule.ADOQueryCLIENTE.SQL.Clear;
   DataModule.ADOQueryCLIENTE.SQL.Add('insert into CLIENTE (NOME) values (:nomcli)');
   DataModule.ADOQueryCLIENTE.Parameters.ParamByName('p3').Value  := cliEditNome.Text;
   DataModule.ADOQueryCLIENTE.ExecSQL;      DataModule.ADOConnection.CommitTrans;   except
   DataModule.ADOConnection.RollbackTrans;
  end;
 DÚVIDA: ApplyUpdate() e Refresh()  podem ser executados nesta situação ? Como ?                  Quando for inserir em duas ou mais tabelas, tipo: Dados NF e Itens NF.                Como verificar se nao teve problema ao inserir Dados NF antes dos Itens ?     Exemplo 2:     DataModule.ADOConnection1.BeginTrans;
  try
   DataModule.ClientDataSetCLIENTE.Insert;
   DataModule.ClientDataSetCLIENTE.FieldByName('NOME').AsString := cliEditNome.Text;    DataModule.ClientDataSetCLIENTE.Post;
   DataModule.ClientDataSetCLIENTE.ApplyUpdates(0);
   DataModule.ClientDataSetCLIENTE.Refresh;
     DataModule.ADOConnection.CommitTrans;   except
   DataModule.ADOConnection.RollbackTrans;
  end;
 DÚVIDA: A ordem dos comandos esta certa ? Alguma implementação ??                Seria a melhor opcao para se trabalhar ? Se é que é possivel.       Desde já agradeço,
Eremita

Eremita

Curtidas 0

Respostas

André Silveira

André Silveira

16/04/2011

DÚVIDA: ApplyUpdate() e Refresh()  podem ser executados nesta situação ?
Sim para ambos.
Utiliza o ApplyUpdates para efetuar a gravação, após comitar a transação, utiliza o refresh para carregar os dados.

Quanto a mais de uma tabela, ao se dar o applyupdates em um tabela pai, ele já grava os dados das tabelas filhas automaticamente, ou seja coloca tudo em uma transação só.

   DataModule.ClientDataSetCLIENTE.Insert;
   DataModule.ClientDataSetCLIENTE.FieldByName('NOME').AsString := cliEditNome.Text;    DataModule.ClientDataSetCLIENTE.Post;
  
   DataModule.ClientDataSetCLIENTE2.Insert;
   DataModule.ClientDataSetCLIENTE2.FieldByName('NOMEFANTASIA').AsString := cliEditNome.Text;    DataModule.ClientDataSetCLIENTE2.Post;

   DataModule.ClientDataSetCLIENTE.ApplyUpdates(0);
   DataModule.ClientDataSetCLIENTE.Refresh;
 
ClientDataSetCliente2 é filho de ClientDataSetCliente.

Quanto a ser a melhor opção, não seria necessário abrir uma transação quando se vai usar o applyupdates, pois ele mesmo já cria uma transação, caso não tenha nenhuma ativa.
GOSTEI 0
José

José

16/04/2011

Este tópico esta sendo fechado por inatividade. Se necessário, sinalizar para que seja reaberto ou abrir um novo.
GOSTEI 0
POSTAR