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 registros (https://www.clubdelphi.com/foros/showthread.php?t=64091)

ebeltete 17-03-2009 12:34:18

duplicar registros
 
Hola amigos del foro, trabajo con Firebird 2.0 y Delphi 5, estoy desarrollando un sistema de facturacion con maestro-detalle
Tengo una tabla maestro "facturas" y otra detalle "lineas". El tema es que quiero hacer una copia de una determinada cantidad de registros de la tabla facturas con el detalle correspondiente, cambiando solo el campo fecha, o sea quiero copiar todas las facturas de una determinada fecha y "duplicarlas" con un nueva fecha, no se si se entiende.
Se me ocurre hacer un select y luego recorrer todos los renglones realizando un insert con los valores correspondientes, pero tal vez exista una forma mas "facilk" de hacerlo, gracias.

gmontes 17-03-2009 19:33:45

en la web encontre esto, espero que te sirva:


Código SQL [-]INSERT INTO repres SELECT * FROM empleados WHERE titulo = 'rep ventas'

Con la SELECT obtenemos las filas correspondientes a los empleados con título rep ventas,y las insertamos en la tabla repres. Como las tablas tienen la misma estructura no hace falta poner la lista de columnas y podemos emplear * en la lista de selección de la SELECT.
Ejemplo: Supongamos ahora que la tabla repres tuviese las siguientes columnas numemp, oficinarep, nombrerep. En este caso no podríamos utilizar el asterisco, tendríamos que poner:

Código SQL [-]INSERT INTO repres SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas'

O bien:
Código SQL [-]INSERT INTO repres (numemp, oficinarep, nombrerep) SELECT numemp, oficina, nombre FROM empleados WHERE titulo = 'rep ventas'

espero que algun ejemplo te sirva

hecospina 17-03-2009 20:14:13

Hola
Si la tabla facturas tiene un primary key, que supongo que si, no te va a funcionar, de no ser asi el insert que te sugieren va a funcionar muy bien, solo que el es select cambias el campo fecha por el valor constante de la nueva fecha por el.
Código SQL [-]
insert into facturas (factura,numero,fecha,valor) select factura,numero,'03/17/2009',valor from facturas

o algo muy parecido con las condiciones que requieras
Suerte

ebeltete 17-03-2009 22:34:11

Tu ejemplo funciona pero no se como tendria que hacer parponer valores nuevos a algunos campos, por ejemplo copiar los registros con una nueva fecha

ebeltete 17-03-2009 22:45:28

Entendido, pero la tabla tiene un primary key

hecospina 17-03-2009 23:57:01

Hola
Entonces no puedes duplicar los registros, tendrias que insertarlos con otro numero

asi lo podrias hacer
Código SQL [-]
insert into facturas (factura,numero,fecha,valor) select factura,numero+50000,'03/17/2009',valor from facturas

de esta forma la factura de quedara con el numero mas 50000, por ejemplo la factura con numero 23456 quedaria con 73456

Suerte

ebeltete 18-03-2009 00:45:07

Puedo hacer una variable?

insert into facturas (factura,numero,fecha,valor) select factura,:numeronuevo,valor from facturas

hecospina 19-03-2009 14:09:28

El parametro funcionaria si se va a insertar un solo registro, si se va a insertar mas de uno tendrias que pasar un valor nuevo para cada uno de ellos


La franja horaria es GMT +2. Ahora son las 19:04:28.

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