Clonando objetos no delphi
04/08/2008
0
function getCloneDataSet(dataSet:Tdataset):Tdataset; var localDataSet:Tdataset; begin localDataset := Tdataset.create(nil); //aqui quero clonar o "dataset"(parâmetro) para a variavel local(localDataset) Result := localDataset; end;
Joaohenriquemf
Post mais votado
Mais Posts
04/08/2008
Thomaz_prg
Se for outro dataset ou outro componente use a função que disponibilizei no link abaixo:
http://ube-167.pop.com.br/repositorio/28488/meusite/dica035.htm
05/08/2008
Joaohenriquemf
estou usando ela da seguinte forma:
constructor TDataSetCopier.create(dataSet: TDataSet); begin inherited Create(); Self.localDataSet := TDataSet.Create(nil); Self.localDataSet := TDataSet(CloneComponent(dataSet)); Self.setEvents(); end; //função para clonar component. function CloneComponent(Component : TComponent):TComponent; var ms : TMemoryStream; clone : TComponent; begin ms := TMemoryStream.Create; try ms.WriteComponent(Component) ; ms.Position := 0; clone := TComponentClass(component.ClassType).Create(Application) ; ms.ReadComponent(clone) ; finally ms.Free; end; Result := Clone; end;
O componente que estou passando no construtor da classe, que um TZQuery aberto(open, state=browse).
O ocorre o erro na linha
ms.ReadComponent(clone);
Erro:
---------------------------
Prjdatasetcopier
---------------------------
Database connection component is not assigned.
---------------------------
OK
---------------------------
O que está ocorrendo?
05/08/2008
Thomaz_prg
constructor TDataSetCopier.create(dataSet: TDataSet);
begin
inherited Create();
Self.localDataSet := TDataSet(CloneComponent(dataSet));
Self.setEvents();
end;
Outra coisa, o seu localDataSet é o mesmo tipo de dataset que está sendo clonado? Pois pode ser que esteja dando problema justamente na clonagem de objetos de diferentes tipos.
07/08/2008
Joaohenriquemf
Clique aqui para fazer login e interagir na Comunidade :)