En realidad mas que pasar registros de un DBGrid a otro, lo que queres hacer es copiar registros de un DataSet a otro. El DBGrid es una circustancia mas
La propiedad
TDBGrid.SelectedRows contiene una lista de
TBookmarks. Un
TBookmark no es mas que un identificador, dentro de un
TDataSet, de un registro, o si queres verlo de otra manera, es un identificador para cada fila de tu
TDBGrid
La clase TDataSet posee metodos para posicionarse de un TBookmark a otro, lo cual se explica
aca. Basicamente lo que hay que hacer es llamar al metodo
GotoBookmark.
Aca hay un ejemplo
La primer parte del problema ya la tendrias resuelta: recorrer las filas seleccionadas, posicionarse en cada una, y luego realizar la copia sobre el otro
TDataSet
Hay una seccion en la documentacion dedicada a esto:
Copying Data from Another Dataset
Tambien podes hacer la implementacion a lo "chapucero", es decir, si conoces la estructura del otro TDataSet, lo unico que hay que hacer es crear un nuevo registro en el DataSet destino (
Append o
Insert segun corresponda), setear los valores de los campos y luego invocar a
Post
Sino conoces la estructura del DataSet de antemano, o tenes que copiar todos los campos, se puede implementar un recorrido sobre los campos (
Fields) de un DataSet e ir copiando el valor campo a campo. Obviamente que los campos deben estar en el mismo orden, con el mismo nombre y mismo tipo de datos
Si no me equivoco puede que algunos componentes tengan implementado un metodo que hace justamente esto. por ej, FireDAC
Por ultimo el codigo de estas unidades, si bien no hace exactamente lo que necesitas, te pueda servir como guia para armar tu solucion:
https://github.com/ortuagustin/Delph...ee/master/Data
Por ejemplo, este:
Código Delphi
[-]
function TFDMemTableDataSetCloner.CopyRecords(const Records: TArray; Source: TDataSet; Owner: TComponent): TDataSet;
var
Copy: TFDMemTable;
I: Integer;
begin
Copy := TFDMemTable.Create(Owner);
try
Copy.CopyDataSet(Source, [coStructure, coRestart]);
Source.DisableControls;
try
for I := Low(Records) to High(Records) do
begin
Source.GotoBookmark(Records[i]);
Copy.Append;
Copy.CopyFields(Source);
Copy.Post;
end;
finally
Source.EnableControls;
end;
finally
Result := Copy;
end;
end;