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)
-   -   duplicar varios registros de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=75594)

gmontes 05-09-2011 20:27:11

duplicar varios registros de una tabla
 
como puedo duplicar varios registros dentro de la misma tabla.

lo intentes con un insert con un select , pero se ciclo :o

alguna idea??

guillotmarc 06-09-2011 10:31:59

¿ Nos enseñas lo instrucción que has intentado ?

Casimiro Notevi 06-09-2011 10:51:15

Queremos ver el código :)

oscarac 06-09-2011 15:44:18

no soy muy experto en delphi pero te dejo una idea que se me ocurre

2 arrays,
1 para almacenar los nombres de los campos (Fieldbyname, field, etc)
1 para almacenar los valores de los campos (del que queremos copiar)

entonces hacemos el append y vaciamos en ese nuevo registro el segundo array con los campos almacenados en el primero

se entiende? djie que era una idea:D

gmontes 06-09-2011 16:15:19

ok, se que no se debe hacer, pero dentro de ibexpert esto es lo que puse.

INSERT INTO cdetallefac SELECT * FROM cdetallefac WHERE documento='H6234'

:o si, fue sobre la misma tabla

cuando vi que estaba tratando de insertar el registro 165045600 dije, algo anda mal :o

fue un lapsus brutus

oscarac 06-09-2011 16:27:29

mmmm y que te parecio mi idea?
quiza alguien con mas experiencia en delphi pueda plasmarla, a veces es util repetir uno o varios registros

Quim Herrera 06-09-2011 17:57:07

Hola,

Prueba esto:
Código Delphi [-]

procedure DuplicaReg( Dataset: TDataset);
var
 aField : Variant ;
 ANomCamps: Variant;
 i,numcamps      : Integer ;
 begin

 aField := VarArrayCreate( [0, Dataset.Fieldcount-1], VarVariant);
 aNomCamps := VarArrayCreate( [0, Dataset.IBTable1.Fieldcount-1], VarVariant);
 numcamps:=  Dataset.Fieldcount;

 For i := 0 to (numcamps-1) Do
 Begin
   ANomCamps [i] :=  Dataset.fields[i].FieldName;
   aField[i] :=  Dataset.fields[i].Value ;
 End;
 Dataset.append;
 For i := 0 to (numcamps-1) Do
 Begin
    Dataset.FieldByName(ANomCamps[i] ).Value := aField[i ] ;
 End;
 Dataset.Post;
 
end;

Puedes utilizar un IBDataset o un IBTable.
No olvides de hacer el commit

Saludos,

Quim Herrera

gmontes 06-09-2011 17:57:46

Cita:

Empezado por oscarac (Mensaje 411021)
mmmm y que te parecio mi idea?
quiza alguien con mas experiencia en delphi pueda plasmarla, a veces es util repetir uno o varios registros

lo que no queria era programar, queria hacerlo desde ibexpert, pero creo que es mas limpia tu idea. gracias

oscarac 06-09-2011 18:41:31

Quim herrera lo hizo
parece que no estoy tan mal con las ideas no? :p:p

gmontes 06-09-2011 22:11:35

gracias Quim Herrera

lo voy a probar

guillotmarc 07-09-2011 16:40:17

¿ Puedes actualizar a la última versión de Firebird ?, puesto que en las últimas versiones corrigieron este comportamiento y tu instrucción ya funcionará como esperas.

Saludos.

gmontes 07-09-2011 20:18:04

Cita:

Empezado por guillotmarc (Mensaje 411152)
¿ Puedes actualizar a la última versión de Firebird ?, puesto que en las últimas versiones corrigieron este comportamiento y tu instrucción ya funcionará como esperas.

Saludos.

tengo la 2.1.3 instalada. ok


La franja horaria es GMT +2. Ahora son las 14:09:31.

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