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)
-   -   crear referencia en tabla firebird (https://www.clubdelphi.com/foros/showthread.php?t=73955)

ebeltete 26-05-2011 03:27:56

crear referencia en tabla firebird
 
Hola tengo un BD en Firebird con una tabla movimientos y otra tabla items, quiero crear una referencia donde el maestro seria la tabla movimientos y el detalle la tabla items, estoy probando con alter table pero no me sale, pienso que seria algo como:
alter table movimientos alter column id_cab references items(item_id_cab)
Agradezco si pueden decirme como crear la referencia en tablas exisitentes y tambien como hacerlo al crear la tabla desde cero.
Gracias y saludos.

ecfisa 26-05-2011 03:57:47

Hola ebeltete.

Declarar la relación en la creación de la tabla sería algo como:
Código SQL [-]
CREATE TABLE DETALLE(
   DETALLE_ID INTEGER DEFAULT 1 NOT NULL,
   CAMPO1 CHAR(6) NOT NULL,
   CAMPO2 VARCHAR(30) NOT NULL,
   ...
   REFMAESTRO INTEGER NOT NULL,
   CONSTRAINT DETALLE_PK PRIMARY KEY(DETALLE_ID),
   FOREIGN KEY(REFMAESTRO) REFERENCES MAESTRO(MAESTRO_ID) 
     ON DELETE SET NULL 
     ON UPDATE CASCADE  /* acciones referenciales (pueden omitirse) */ 
);
Estas son las acciones referenciales:
NO ACTION: No hará nada.
CASCADE : Realizará la misma acción en las tablas relacionadas.
SET NULL : Pondrá NULL en las columnas de las tablas relacionadas.
SET DEFAULT : Pondrá el valor definido por defecto en las columnas de las tablas relacionadas.

Ahora desde Delphi, un ejemplo con los componentes IBX.
Teniendo dos TIBDataSet , llamemoslos: tbMaestro y tbDetalle, los cuáles tienen sus respectivos TDataSources: dsMaestro y dsDetalle.
Los cambios se harán sobre tbDetalle y son:
A la propiedad DataSource de tbDetalle tenés que asignarle dsMaestro y en su propiedad SelectSQL, algo como:
Código SQL [-]
SELECT * FROM DETALLE
WHERE REFMAESTRO = :MAESTRO_ID
Los nombres de tabla y campos deberás cambiarlos por los que vos pusiste.

Saludos.

ebeltete 26-05-2011 20:10:03

Ok. entiendo, haciendo:
SELECT * FROM DETALLE
WHERE REFMAESTRO = :MAESTRO_ID
al insertar datos en detalle, el campo REFMAESTRO lo completa automaticamente con el valor de MAESTRO_ID o lo tengo que hacer yo?

ecfisa 27-05-2011 21:59:05

Hola ebeltete.

En ese caso tendrías que completar el valor.

Saludos.

Lepe 30-05-2011 10:28:41

o no... http://www.clubdelphi.com/foros/showthread.php?t=4333

Saludos

ecfisa 30-05-2011 10:39:47

Cita:

Empezado por Lepe (Mensaje 401807)
o no... Saludos

No conocia esa posibilidad, muchísimas gracias por el dato Lepe, voy a probarlo ;)



Saludos.:)


La franja horaria es GMT +2. Ahora son las 07:21:08.

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