Copiar dados de um Client para outro Client de outro banco

02/04/2014

0

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

Responder

Posts

22/04/2014

Mario Inacio

up up
Responder

22/04/2014

Cauê Nishijima

Qual a possibilidade de fazer um looping? São muitos dados?
Responder

22/04/2014

Cauê Nishijima

Qual a possibilidade de fazer um looping? São muitos dados?
Responder

23/04/2014

Mario Inacio

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
Responder

23/04/2014

Cauê Nishijima

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;

Responder

26/04/2014

Mario Inacio

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

Funcionando muito bem.

Obrigado, abc
Responder

27/04/2014

Cauê Nishijima

Que bom Mario, qualquer outra dúvida estamos ai!
Abraço
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar