Clonando objetos no delphi

04/08/2008

12

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;



Responder

Post mais votado

18/02/2014

Olá Tudo bem, qual forma ?
Responder

Mais Posts

04/08/2008

Thomaz_prg

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


Responder

05/08/2008

Joaohenriquemf

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:

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?


Responder

05/08/2008

Thomaz_prg

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.


Responder

07/08/2008

Joaohenriquemf

Acabei tendo que fazer de outra forma.Obrigado pela ajuda amigos.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira