Fórum ApplyUdates para todos os ClientDataSet #326936

07/08/2006

0

Alguém sabe como fazer uma função para dar um applyupdates no afterpost de todos os clientdataset


Visualdesigner

Visualdesigner

Responder

Posts

07/08/2006

Raserafim

vou sugerir duas formas:
1- você pode colocar este código no evento affterpost de um clientdataset
  TClientDataSet(Sender).ApplyUpdates(0);

e então nos eventos affterpost dos outros clientdataset vc direciona para este evento.

2- vc faz o procedimento acima, mas ao invés de ir em cada clientdataset vc pode colocar este código no OnCreate do DataModule

......
var
C: Byte;
begin
for C := 0 to ComponentCount - 1 do
if (Components[C].ClassType = TClientDataSet) then
TClientDataSet(Components[C]).AffterPost := ClientDataSet1.AffterPost
end;


Responder

Gostei + 0

07/08/2006

Marco Salles

Alguém sabe como fazer uma função para dar um applyupdates no afterpost de todos os clientdataset


Não seria em cascata...

var 
  TudoOK: Boolean; 
  Transacao: TTransactionDesc; 
begin 
  TudoOK:= False; 
  Transacao.TransactionID:= 1; 
  Transacao.IsolationLevel:=  xilReadCommitted; 
  SQLConnection1.StartTransaction(Transacao); 
  // Aplicando os updates 
  if ClientDataSet1.ApplyUpdates(0) = 0 then 
    if ClientDataSet2.ApplyUpdates(0) = 0 then 
      if ClientDataSet3.ApplyUpdates(0) = 0 then 
        if ClientDataSet4.ApplyUpdates(0) = 0 then 
          TudoOK:= True; 
  // Note que TudoOK só será true se não houver nenhum erro em 
//nenhum dos Updates 
  if TudoOK then 
  begin 
    SQLConnection1.Commit(Transacao); 
    ShowMessage(´Atualizações OK.´); 
  end 
  else 
  begin 
    SQLConnection1.Rollback(Transacao); 
    ShowMessage(´Ocorreram erros. Alterações descartadas.´); 
  end; 
end;



Responder

Gostei + 0

07/08/2006

Marco Salles

Acho que entendi mau a sua pergunta. :oops: :oops: :oops:


Responder

Gostei + 0

07/08/2006

Visualdesigner

Você não entendeu minha pergunda? Deixa eu ser mais claro.


Tenho uma aplicação com vários ClientDataSet, então coloco o ApplyUpdates em cada um

Ex:
cdsPagar.ApplyUpdates(0);
cdsClientes.ApplyUpdates(0);
cdsProdutos.ApplyUpdates(0); e assim por diante

Queria uma função (SÓ), como a que os colegas acima me passaram, que sirva para todos os ClientDataSets


Responder

Gostei + 0

08/08/2006

Paullsoftware

Eu faço assim:

Crio uma Procedure Chamada [b:41ada28036]Transacao[/b:41ada28036] onde passo os parametros atuais...
procedure Transacao(aConexao:TSQLConnection; aDataSet: TClientDataSet);
 var TransDesc: TTransactionDesc;
begin
 try
  TransDesc.TransactionID  := 1;
  TransDesc.IsolationLevel := xilREADCOMMITTED;
  aConexao.StartTransaction(TransDesc);
  if aDataSet.ApplyUpdates(0) = 0 then
   begin
     aConexao.Commit(TransDesc);
   end;
 Except
  aConexao.Rollback(TransDesc);
   raise Exception.Create(´Ocorreu um erro no processo transação,´+
                          ´ a operação não foi concluída!´+#10+´Tabela: ´+
                          pChar(aDataSet));
 end;
end; (* Transacao *)


modo de usar:
no Evento AffterPost do ClientDataSet eu faço:
Transacao(SqlConnection1,TClientDataSet(DataSet));

espero ter ajudado


Responder

Gostei + 0

08/08/2006

Mrmarcelojr

Da pra fazer assim tbm

var i:Integer;
begin
   for i:=0 to Form1.ComponentCount-1 do
     if Form1.Components[i] is TClientDataSet then
        TClientDataSet(Form1.Components[i]).ApplyUpdates(0);


Ele procura por todos o CDS do teu form e da um applyupdates em cada um


flw
?:]


Responder

Gostei + 0

10/08/2006

Raserafim

continuo achando que o código que postei vai te ajudar.


Responder

Gostei + 0

10/08/2006

Visualdesigner

Olá RESERAFIM, testei seu código mais está danto problemas no SENDER

aparece um erro VARIAVEL NOT INDETIFIER. Por acaso não teria que adicionar alguma cláusula ao USES


Responder

Gostei + 0

10/08/2006

Paullsoftware

Olá RESERAFIM, testei seu código mais está danto problemas no SENDER aparece um erro VARIAVEL NOT INDETIFIER. Por acaso não teria que adicionar alguma cláusula ao USES

não, vai funcionar se vc mudar de [b:248d4b0bd3]Sender[/b:248d4b0bd3] para [b:248d4b0bd3]DataSet[/b:248d4b0bd3]... espero ter ajudado! :wink:


Responder

Gostei + 0

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

Aceitar