Fórum ApplyUdates para todos os ClientDataSet #326936
07/08/2006
0
Visualdesigner
Curtir tópico
+ 0Posts
07/08/2006
Raserafim
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
07/08/2006
Marco Salles
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
07/08/2006
Marco Salles
Gostei + 0
07/08/2006
Visualdesigner
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
08/08/2006
Paullsoftware
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
08/08/2006
Mrmarcelojr
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
10/08/2006
Raserafim
Gostei + 0
10/08/2006
Visualdesigner
aparece um erro VARIAVEL NOT INDETIFIER. Por acaso não teria que adicionar alguma cláusula ao USES
Gostei + 0
10/08/2006
Paullsoftware
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
Clique aqui para fazer login e interagir na Comunidade :)