Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-05-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Duplicar registro en clientdataset

buenas tardes
asi como dice el titulo, es posible mediante alguna instrucción (en visual fox existe el scat memv copiar registro en variables de memoria y el gath memv pegar )... duplicar un registro de un clientdataset?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #2  
Antiguo 29-05-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

No sé de ningún metodo que poseea el TClientDataSet para realizar esa acción, pero podes agregársela sin mucha dificultad:
Código Delphi [-]
unit CDSExt;

interface

uses Variants, DBClient;

type
  TClientDataSet = class( DBClient.TClientDataSet )
  private
    FAuxFields: Variant;
  public
    procedure ReadRecord;
    procedure WriteRecord( const atLast: Boolean = False );
  end;

implementation

{ TClientDataSet }

procedure TClientDataSet.ReadRecord;
var
  i: Integer;
begin
  FAuxFields := VarArrayCreate( [0, FieldCount-1], varVariant );
  for i := 0 to FieldCount-1 do
    FAuxFields[i] := Fields[i].Value;
end;

procedure TClientDataSet.WriteRecord( const atLast: Boolean = False );
var
  i: Integer;
begin
  if not VarIsEmpty( FAuxFields ) then
  begin
    if atLast then
      Append
    else
      Insert;
    for i := 0 to FieldCount-1 do
      Fields[i].Value := FAuxFields[i];
  end;
end;

end.

Solo tenes que recordar agregar la unidad CDSExt (o como la llames) en último lugar al uses de la sección interface donde la vayas a usar, vg.:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, DBClient, ...,  CDSExt;

type
  TForm1 = class( TForm )
    ...
    DataSetProvider1: TDataSetProvider;
    ClientDataSet1: TClientDataSet; 
    DataSource1: TDataSource;
  ...

implementation

// Ejemplos de llamada:

procedure TForm1.Button1Click( Sender: TObject );
begin
  ClientDataSet1.ReadRecord;
end;


procedure TForm1.Button2Click( Sender: TObject );
begin
  ClientDataSet1.WriteRecord( True ); // o :  ClientDataSet1.WriteRecord;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 12-06-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Lo solucione de esta manera, lo publico porque quizá a alguien le pueda ayudar.

Código Delphi [-]
procedure TfrmIngresoComprobantesVarios.DuplicarRegistro;
Var CdsClone : TClientDataSet;
    i: Integer;
begin
  CdsDetalle.Last;
  CdsClone := TClientDataSet.Create(Application);
  try
    CdsClone.CloneCursor(Self.CdsDetalle, True);
    CdsDetalle.Append;
    for I := 0 to CdsClone.FieldCount - 1 do
      CdsDetalle.Fields[i].Value := CdsClone.Fields[i].Value;
    CdsClone.Close;
  finally
    CdsClone.Close;
  end;
  CdsClone.Destroy;
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #4  
Antiguo 10-06-2022
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
hola Gente....
recordé este post y se me ocurre la pregunta... se puede hacer lo mismo pero ya no en un ClientDataSet si no mas bien en un query?
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 10-06-2022
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

No sé de ningún metodo que poseea el TClientDataSet para realizar esa acción, pero podes agregársela sin mucha dificultad:
Código Delphi [-]
unit CDSExt;

interface

uses Variants, DBClient;

type
  TClientDataSet = class( DBClient.TClientDataSet )
  private
    FAuxFields: Variant;
  public
    procedure ReadRecord;
    procedure WriteRecord( const atLast: Boolean = False );
  end;

implementation

{ TClientDataSet }

procedure TClientDataSet.ReadRecord;
var
  i: Integer;
begin
  FAuxFields := VarArrayCreate( [0, FieldCount-1], varVariant );
  for i := 0 to FieldCount-1 do
    FAuxFields[i] := Fields[i].Value;
end;

procedure TClientDataSet.WriteRecord( const atLast: Boolean = False );
var
  i: Integer;
begin
  if not VarIsEmpty( FAuxFields ) then
  begin
    if atLast then
      Append
    else
      Insert;
    for i := 0 to FieldCount-1 do
      Fields[i].Value := FAuxFields[i];
  end;
end;

end.

Solo tenes que recordar agregar la unidad CDSExt (o como la llames) en último lugar al uses de la sección interface donde la vayas a usar, vg.:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, DBClient, ...,  CDSExt;

type
  TForm1 = class( TForm )
    ...
    DataSetProvider1: TDataSetProvider;
    ClientDataSet1: TClientDataSet; 
    DataSource1: TDataSource;
  ...

implementation

// Ejemplos de llamada:

procedure TForm1.Button1Click( Sender: TObject );
begin
  ClientDataSet1.ReadRecord;
end;


procedure TForm1.Button2Click( Sender: TObject );
begin
  ClientDataSet1.WriteRecord( True ); // o :  ClientDataSet1.WriteRecord;
end;
...

Saludos
utilice este ejemplo..... gracias
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duplicar un registro ronaldyoung SQL 2 28-02-2011 06:14:50
Saber si un registro en un ClientDataset ya está en la BD droguerman OOP 3 22-03-2010 17:40:55
Updatear Registro ClientDataSet tonyskl Conexión con bases de datos 3 13-05-2008 17:01:34
Insertar registro en un ClientDataSet ElDioni Conexión con bases de datos 8 22-04-2008 18:21:10
Primer registro de un ClientDataSet?? Berto2003 Varios 4 13-03-2007 17:24:49


La franja horaria es GMT +2. Ahora son las 10:16:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi