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