ApplyUdates para todos os ClientDataSet
Alguém sabe como fazer uma função para dar um applyupdates no afterpost de todos os clientdataset
Visualdesigner
Curtidas 0
Respostas
Raserafim
07/08/2006
vou sugerir duas formas:
1- você pode colocar este código no evento affterpost de um clientdataset
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;
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;
GOSTEI 0
Marco Salles
07/08/2006
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;
GOSTEI 0
Marco Salles
07/08/2006
Acho que entendi mau a sua pergunta. :oops: :oops: :oops:
GOSTEI 0
Visualdesigner
07/08/2006
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
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
GOSTEI 0
Paullsoftware
07/08/2006
Eu faço assim:
Crio uma Procedure Chamada [b:41ada28036]Transacao[/b:41ada28036] onde passo os parametros atuais...
modo de usar:
no Evento AffterPost do ClientDataSet eu faço:
espero ter ajudado
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
GOSTEI 0
Mrmarcelojr
07/08/2006
Da pra fazer assim tbm
Ele procura por todos o CDS do teu form e da um applyupdates em cada um
flw
?:]
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
?:]
GOSTEI 0
Raserafim
07/08/2006
continuo achando que o código que postei vai te ajudar.
GOSTEI 0
Visualdesigner
07/08/2006
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
aparece um erro VARIAVEL NOT INDETIFIER. Por acaso não teria que adicionar alguma cláusula ao USES
GOSTEI 0
Paullsoftware
07/08/2006
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:
GOSTEI 0