Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 09-06-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Se me ocurren dos posibles soluciones:

si tu estructura lo permite:

Recordá que el segundo parámetro de la función gen_id es el avance del generador, así podrías hacer:

Código SQL [-]
insert into empresa(gen_id(gen_empresas, 1), 'FULANITO SA', ...);
insert into factura(gen_id(gen_facturas, 1), gen_id(gen_empresas, 0), 'A1'...);
insert into detalle_factura(gen_id(gen_detfacturas, 1), gen_id(gen_factura, 0), 123);
insert into detalle_factura(
...
insert into factura(gen_id(gen_facturas, 1), gen_id(gen_empresas, 0), 'A2'...);
insert into detalle_factura(gen_id(gen_detfacturas, 1), gen_id(gen_factura, 0), 123);
...
insert into empresa(gen_id(gen_empresas, 1), 'FULANITO 2', ...);
insert into factura(gen_id(gen_facturas, 1), gen_id(gen_empresas, 0), 'A1'...);
..

El problema es que con una estructura medianamente compleja, esto ya no es posible.

Para estos otros casos, se me ocurre otra solución:

primero, crear una tabla de equivalencia entre ID's, algo como:

Código SQL [-]
create table idequiv (
  id integer not null primary key, 
  tabla_origen varchar(20), 
  id_origen integer, 
  id_destino integer
);

create generator gen_idequiv;
create index idequiv_idorigen on idequiv(tabla_origen, id_origen);

Esta tabla servirá para "recordar" el id en la base de datos de origen, así que el script de traslado podría lucir como:

Código SQL [-]
--primero salvamos, el ID del registro que estamos procesando, en este caso la empresa 1, y generamos el nuevo.  
insert into idequiv(gen_id(gen_idequiv, 1), 'EMPRESA', 1, gen_id(gen_empresas, 1));
-- ahora usamos ese valor dondequiera que requiramos el id de la empresa valiendonos del id en la base de origen
insert into empresa((select id_destino from idequiv where tabla_origen = 'EMPRESA' and id_origen = 1), 'FULANITO SA', ...);
insert into idequiv(gen_id(gen_idequiv, 1), 'EMPRESA', 2, gen_id(gen_empresas, 1));
insert into empresa((select id_destino from idequiv where tabla_origen = 'EMPRESA' and id_origen = 2), 'FULANITO 2', ...);

insert into idequiv(gen_id(gen_idequiv, 1), 'FACTURA', 1, gen_id(gen_facturas, 1));

insert into factura((select id_destino from idequiv where tabla_origen = 'FACTURA' and id_origen = 1), (select id_destino from idequiv where tabla_origen = 'EMPRESA' and id_origen = 1), 'A1'...);
insert into detalle_factura(gen_id(gen_detfacturas, 1), (select id_destino from idequiv where tabla_origen = 'FACTURA' and id_origen = 1), 0), 123);
insert into detalle_factura(

En la aplicación que genera el script, sería sencillo añadir funciones que dada una tabla y un id del registro, generen la sentencia de inserción y el subquery a utilizar. El modelo se simplificaría si se usara un único generador para todas las tablas.

Si es una base de datos que aún no está en producción, hay otras formas de enfrentar este problema.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Extract metadata por código Ivanzinho Firebird e Interbase 13 24-09-2007 00:56:44
Una lo ve, pero la otra no casacham Conexión con bases de datos 7 03-06-2007 23:37:59
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12
Crear otra hoja en excel igual a la anterior Novás Servers 6 23-07-2006 01:49:48
Restaurar Ventana desde otra aplicación Sr_Sombrero API de Windows 4 06-04-2006 15:17:30


La franja horaria es GMT +2. Ahora son las 21:12:54.


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
Copyright 1996-2007 Club Delphi