Fórum Copiar dados de um Client para outro Client de outro banco #474871
02/04/2014
0
Preciso replicar todos os dados de uma tabela Firebird que estão num clientdataset para outro banco firebird.
Até consigo atribuir o "Data" entre clients mas não grava no segundo banco.
- dm contem o banco origem
- dmLocal contem o banco destino
dmLocal.cds_aux1.data := dm.cds_aux1.Data ;
dmLocal.cds_aux1.ApplyUpdates(0);
Notei que o ChangeCount do dmLocal está como zero.
Poderiam me dar uma ajuda?
att
Mario
Mario Inacio
Curtir tópico
+ 0Posts
22/04/2014
Mario Inacio
Gostei + 0
22/04/2014
Cauê Nishijima
Gostei + 0
22/04/2014
Cauê Nishijima
Gostei + 0
23/04/2014
Mario Inacio
Essa rotina é pra atualizar o PAF mais rapidamente.
A maior tabela possui 20000 registros, as demais são pequenas mas essa demora muito fazendo um looping.
att
Gostei + 0
23/04/2014
Cauê Nishijima
function TransfereDadosEntreTabelas(cdsOrigem: TClientDataSet;
nomeTabelaDestino: string; conexaoDestino: TSQLConnection):Boolean;
var
TabelaAuxiliar: TSQLTable;
ClientDataSet: TClientDataSet;
DataSetProvider: TDataSetProvider;
I, n: integer;
begin
try
TabelaAuxiliar := TSQLTable.Create(nil);
TabelaAuxiliar.SQLConnection := conexaoDestino;
TabelaAuxiliar.TableName := nomeTabelaDestino;
TabelaAuxiliar.Open;
DataSetProvider := TDataSetProvider.Create(nil);
DataSetProvider.DataSet := TabelaAuxiliar;
DataSetProvider.Name := 'dsp';
ClientDataSet := TClientDataSet.Create(nil);
ClientDataSet.ProviderName := 'dsp';
ClientDataSet.FieldDefs.Clear;
ClientDataSet.Close;
for I := 0 to cdsOrigem.FieldCount - 1 do
begin
ClientDataSet.FieldDefs.Add(cdsOrigem.Fields[I].FieldName,
cdsOrigem.Fields[I].DataType, cdsOrigem.Fields[I].Size, cdsOrigem.Fields[I].Required);
end;
ClientDataSet.CreateDataSet;
ClientDataSet.Open;
cdsOrigem.First;
while not cdsOrigem.Eof do
begin
ClientDataSet.Append;
for I := 0 to cdsOrigem.FieldCount - 1 do
begin
ClientDataSet.Fields[I].Value := cdsOrigem.Fields[I].Value;
end;
cdsOrigem.Next;
end;
if not(ClientDataSet.IsEmpty) then
begin
DataSetProvider.ApplyUpdates(ClientDataSet.Delta, -1, n);
Result := True;
end
else
Result := False;
except
Result:= False;
end;
end;
Gostei + 0
26/04/2014
Mario Inacio
Sua solução foi muita eficaz.
Funcionando muito bem.
Obrigado, abc
Gostei + 0
27/04/2014
Cauê Nishijima
Abraço
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)