Clonando objetos no delphi
Olá amigos, gostaria de clonar um data set
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
Curtidas 0
Melhor post
Eduardo Junqueira
18/02/2014
Olá Tudo bem, qual forma ?
GOSTEI 2
Mais Respostas
Thomaz_prg
04/08/2008
Bom, se for um ClientDataset pode usar o método CloneCursor.
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
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
GOSTEI 0
Joaohenriquemf
04/08/2008
Olá, estou tendo um problema na clonagem do component pois não estou usando clientdataset tive que usar o código de clonagem.
estou usando ela da seguinte forma:
O componente que estou passando no construtor da classe, que um TZQuery aberto(open, state=browse).
O ocorre o erro na linha
Erro:
---------------------------
Prjdatasetcopier
---------------------------
Database connection component is not assigned.
---------------------------
OK
---------------------------
O que está ocorrendo?
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?
GOSTEI 0
Thomaz_prg
04/08/2008
A função já instancia um objeto em memória. Tente alterar o trecho do seu construtor para:
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.
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.
GOSTEI 0
Joaohenriquemf
04/08/2008
Acabei tendo que fazer de outra forma.Obrigado pela ajuda amigos.
GOSTEI 0