Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Copiar registro activo en uno nuevo (https://www.clubdelphi.com/foros/showthread.php?t=17251)

fjolivares 30-12-2004 12:16:41

Copiar registro activo en uno nuevo
 
Hola a todos, en IboConsole hay una opcion para copiar el registro activo en uno nuevo, existe una funcion o una sentencia para hacer eso directemante en vez de guardar los valores en variables y copiarlos?

un saludo y gracias.

Neftali [Germán.Estévez] 30-12-2004 15:09:21

Que yo sepa no existe; De todas formas, piensa que no es trivial programar algo genérico para esto, ya que la copia del registro depende no sólo de los campos del registro, sino de las restricciones e índices que puedas tener definidos. Por ejemplo, es inútil duplicar el campo/s que esté/n definido/s como "clave primaria" ya que al intentar insertarlos "saltaría" un error de duplicidad. Algo similar ocurriría con campos que estén definidos en un índice UNIQUE.

marcoszorrilla 30-12-2004 15:16:32

Puedes crearte una función que guarde los valores en una matriz y luego los inserte de nuevo en la misma tabla.

Por si te sirve la idea.
Código Delphi [-]
 procedure TForm1.Button2Click(Sender: TObject);
  
 type 
      {Tipos para array dinámico de variants}
      TRecuerda = array[0..0] of variant;
      PRecuerda = ^TRecuerda;
 var 
    Recuerda:PRecuerda;
    n:integer;
    Campos:integer;
 begin 
    {Reservamos memoria para el array}
    Campos:=Table1.FieldCount;
    GetMem(Recuerda, Campos * SizeOf(variant));
  
    {Vamos al ultimo registro}
    Table1.Last;
    {Recordamos los campos}
    for n:=0 to Table1.FieldCount-1 do 
    begin 
      Recuerda^[n]:=Table1.Fields[n].AsVariant;
    end; 
  
    {Añadimos un registro}
    Table1.Append;
    {Lo rellenamos}
    for n:=0 to Table1.FieldCount-1 do 
    begin 
      Table1.Fields[n].AsVariant:=Recuerda^[n];
    end; 
    {Lo grabamos}
    Table1.Post;
  
    {Liberamos memoria}
    FreeMem(Recuerda, Campos * SizeOf(Variant));
 end;

Tomado de Trucomania.

Un Saludo.


La franja horaria es GMT +2. Ahora son las 13:24:20.

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