Ir al contenido


Foto

[RESUELTO] Copiar dos clientdataset


  • Por favor identifícate para responder
8 respuestas en este tema

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 enero 2011 - 02:19

Hola a todos

Quisiera saber como se copian dos TClientDataset, es decir hago unas operaciones en un cds y cuando termino quiero que otro quede igual.

tengo esto:



delphi
  1. class function TfrCard.Iniciar(MontoPago: Double; var cdsListaPagos: TClientDataset): Boolean;
  2. begin
  3.   frCard := TfrCard.Create(Application);
  4.  
  5.     with frCard do
  6.     begin
  7.         nPago := Pago;
  8.         lbPago.Caption := FormatFloat('#,##0.00', Pago);
  9.         if ShowModal = mrOk then
  10.         begin
  11.           cdsListaPagos.Assign(cdsPagos);  //Aqui es que esta el problema
  12.           Result := True;
  13.         end
  14.         else
  15.           Result := False;
  16.     end; //
  17. end;
  18.  



Ya lo he probado de dos formas distintas:

cdsListaPagos.Assign(cdsPagos);
cdsListaPagos := cdsPagos;

Pero obviamente no funciona.  Alguna luz sobre el tema?  :cry:
  • 0

#2 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 20 enero 2011 - 02:55

¿Y de dónde sale cdsPagos?, como para estar claros en eso.


Saludos!
  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 20 enero 2011 - 03:04

Saludos.

Utiliza el método Clone.

En la Cara Oculta de Delphi 6 tiene un ejemplo sencillo.
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 20 enero 2011 - 03:35

¿Y de dónde sale cdsPagos?, como para estar claros en eso.


Saludos!


cdsPagos esta en el formulario frCard.

Saludos.

Utiliza el método Clone.

En la Cara Oculta de Delphi 6 tiene un ejemplo sencillo.


Gracias Rolphy, voy a leerlo
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 20 enero 2011 - 04:16

Pues a mi se me ocurre hacer lo siguiente:


delphi
  1. procedure CopyClientDataset(Origen, Destino: TClientDataset);
  2. var
  3.   Stream: TMemoryStream;
  4. begin
  5.   Stream:= TMemoryStream.Create;
  6.   try
  7.     Origen.SaveToStream(Stream);
  8.     Stream.Position:= 0;
  9.     Destino.LoadFromStream(Stream);
  10.   finally
  11.     Stream.Free;
  12.   end;
  13. end;



Por ejemplo, creo dos dataset, lleno uno con datos y lo copio en el otro:


delphi
  1. var
  2.   i: Integer;
  3.   Origen, Destino: TClientDataset;
  4. begin
  5.   Origen:= TClientDataset.Create(nil);
  6.   Destino:= TClientDataset.Create(nil);
  7.   try
  8.     with Origen do
  9.     begin
  10.       FieldDefs.Add('i', ftInteger, 0, FALSE);
  11.       CreateDataset;
  12.       for i:= 1 to 1000 do
  13.       begin
  14.         Insert;
  15.         FieldValues['i']:= i;
  16.         Post;
  17.       end;
  18.     end;
  19.     CopyClientDataset(Origen,Destino);
  20.     // Para comprobar que se copio bien
  21.     Destino.SaveToFile('E:\2.txt',dfXML);
  22.   finally
  23.     Origen.Free;
  24.     Destino.Free;
  25.   end;
  26. end;



¿Estoy matando moscas a cañonazos?  ^o|
  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 20 enero 2011 - 04:16

Siguiendo el comentario de Rolphy encontré esto  (y)

Enlace 1

Enlace 2


Saludos!
  • 0

#7 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 21 enero 2011 - 07:35

Pues a mi se me ocurre hacer lo siguiente:


delphi
  1. procedure CopyClientDataset(Origen, Destino: TClientDataset);
  2. var
  3.   Stream: TMemoryStream;
  4. begin
  5.   Stream:= TMemoryStream.Create;
  6.   try
  7.     Origen.SaveToStream(Stream);
  8.     Stream.Position:= 0;
  9.     Destino.LoadFromStream(Stream);
  10.   finally
  11.     Stream.Free;
  12.   end;
  13. end;



Por ejemplo, creo dos dataset, lleno uno con datos y lo copio en el otro:


delphi
  1. var
  2.   i: Integer;
  3.   Origen, Destino: TClientDataset;
  4. begin
  5.   Origen:= TClientDataset.Create(nil);
  6.   Destino:= TClientDataset.Create(nil);
  7.   try
  8.     with Origen do
  9.     begin
  10.       FieldDefs.Add('i', ftInteger, 0, FALSE);
  11.       CreateDataset;
  12.       for i:= 1 to 1000 do
  13.       begin
  14.         Insert;
  15.         FieldValues['i']:= i;
  16.         Post;
  17.       end;
  18.     end;
  19.     CopyClientDataset(Origen,Destino);
  20.     // Para comprobar que se copio bien
  21.     Destino.SaveToFile('E:\2.txt',dfXML);
  22.   finally
  23.     Origen.Free;
  24.     Destino.Free;
  25.   end;
  26. end;



¿Estoy matando moscas a cañonazos?  ^o|


Amigo esta es la solucion, ya que lo hice asi:

cdsListaPagos.CloneCursor(cdsPagos, False, False);

Copia los datos, pero no actualiza los campos aggregates.

Con tu codigo si se actualizan.

Siguiendo el comentario de Rolphy encontré esto  (y)

Enlace 1

Enlace 2


Saludos!


Gracias Felipe este fin tengo material de lectura.
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 21 enero 2011 - 10:59

Entonces....... ¿ Ponemos este hilo como [RESUELTO] ?

Salud OS
  • 0

#9 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 21 enero 2011 - 02:53

No faltaba mas  :cheesy:
  • 0




IP.Board spam blocked by CleanTalk.