Mostrando postagens com marcador Delphi. Mostrar todas as postagens
Mostrando postagens com marcador Delphi. Mostrar todas as postagens

sexta-feira, 8 de abril de 2022

Clonar estrutura e dados de um Dataset para um ClientDataSet

 

Fonte imagem: (www.iconfinder.com)


Imagine o seguinte cenário, você tem um DataSet com muitas colunas e precisa acrecentar mais algumas, calcular, editar e depois exportar essa informações para um planilha.
Sabemos que não é possível edita-las sem afetar os dados diretamente no banco, então precisamos  armazena-las em memória. A solução é copiar os dados originais para um ClientDataSet para poder manipular os dados.
 

Procurei várias soluções prontas na documentação do Delphi e na web e não encontrei nada, assim crie uma função para fazer esta tarefa, segue abaixo:



Método:
procedure ClonaDataSetParaCDS(_QryOrig: TDataset; var _CDSDest: TClientDataSet);
var
I: Integer;
begin
  _CDSDest := nil;
  _CDSDest := TClientDataSet.Create(nil);

  //Atualizando dados do dataset origem
  _QryOrig.Close;
  _QryOrig.Open;


  //Criando estrutura do ClientDataSet
  for I := 0 to _QryOrig.FieldCount -1 do begin
    _CDSDest.FieldDefs.Add(_QryOrig.Fields[I].FieldName,
                           _QryOrig.Fields[I].DataType,
                           _QryOrig.Fields[I].Size,
                           _QryOrig.Fields[I].Required);
  end;
  _CDSDest.CreateDataSet;


  //Transferindo dados
  while not _QryOrig.Eof do begin
    _CDSDest.Append;

    for I := 0 to _QryOrig.FieldCount -1 do
     _CDSDest.Fields[I].Value := _QryOrig.Fields[I].Value;

    _CDSDest.Post;
    _QryOrig.Next;
  end;
end;

 

Dois parâmetros são necessários:
1 - DataSet com os dados originais (select BD).
2 - ClientDataSet que irá receber os dados do DataSet.



Espero ter ajudado e principalmente, simplificado