Respondiendo a Ángel. Yendo desde lo más básico, podrías averiguar si el componente FIBDataSet cuenta con un método llamado
Clone,
CloneCursor o algún otro por el estilo, como es el caso en ciertos tipos de componentes de acceso a datos, y entonces ver su ayuda y probarlo para ver si te funciona como esperas.
Ahora bien, si lo anterior no fuese factible y continuase tu justa indisposición a ejecutar de nuevo la consulta sobre el servidor con otro componente (por la lentitud que mencionas), existe la alternativa sugerida arriba por
ramiretor de usar componentes TClientDataSet. Una de las ventajas de esta clase de objeto es que posee un método llamado
AppendData con el cual puedes copiar el contenido de un conjunto de datos dentro de otro, sin tener que realizar ninguna nueva consulta al servidor ni recorrer manualmente cada uno de los registros originales.
Si lo analizas, hacer dos veces la consulta sobre el servidor es lo que más vale la pena tratar de evitar, pero el copiar las propiedades de un componente a otro puede que no pase de escribir unas cuantas líneas.
En caso de que aún esto último quisieras evitar, y trabajes con Delphi 7, podrías emplear la función
ghCloneDataSet de
GH Freebrary (sin pretender hacer
spam). Esta función
no clona los registros contenidos en el conjunto de datos, pero sí se encarga de crear un nuevo componente con todas y cada una de las propiedades y eventos establecidos en el original, además de sus parámetros e incluso campos persistentes que le hayas establecido en tiempo de diseño (con la opción de excluir algunos de estos elementos).
Código Delphi
[-]
Uses
GHFData;
procedure TForm1.Button1Click(Sender: TObject);
begin
DataSource2.DataSet := ghCloneDataSet (IBDataSet1, Self, 'Active;Name');
DataSource2.DataSet.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
DataSource2.DataSet := ghCloneDataSet (
ClientDataSet1, Self, 'Active;Name');
TClientDataSet (DataSource2.DataSet).AppendData (
ClientDataSet1.Data, True);
end;
NOTA: Dependiendo de cuál sea el actual dueño del conjunto de datos a clonar, convendrá excluir del copiado a la propiedad
Name, ya que no es posible tener dos componentes del mismo nombre conferidos al mismo dueño (
propietario), a menos, claro, que la propiedad
Name de éstos se deje vacía. (El ejemplo lo hice con los conjuntos de datos colocados dentro del formulario).
Un abrazo con copia.
Al.