Copiar dados de um Client para outro Client de outro banco

Delphi

02/04/2014

Bom dia,
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

Mario Inacio

Curtidas 0

Respostas

Mario Inacio

Mario Inacio

02/04/2014

up up
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/04/2014

Qual a possibilidade de fazer um looping? São muitos dados?
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/04/2014

Qual a possibilidade de fazer um looping? São muitos dados?
GOSTEI 0
Mario Inacio

Mario Inacio

02/04/2014

Bom dia,
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
Cauê Nishijima

Cauê Nishijima

02/04/2014

Tenta usar essa função que criei e ver se fica rápido:


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
Mario Inacio

Mario Inacio

02/04/2014

Bom dia Caue,
Sua solução foi muita eficaz.

Funcionando muito bem.

Obrigado, abc
GOSTEI 0
Cauê Nishijima

Cauê Nishijima

02/04/2014

Que bom Mario, qualquer outra dúvida estamos ai!
Abraço
GOSTEI 0
POSTAR