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)
-   -   Problema con sql Update (https://www.clubdelphi.com/foros/showthread.php?t=59677)

juanpe 04-09-2008 10:37:14

Problema con sql Update
 
Hola tengo un problema desde hace algún tiempo que no consigo solucionar.
Tan sencillo como querer hacer un update en tablas que tienen claves foraneas.
Esta es la estructura de una de ellas, que hace referencia de una tabla en cuestio.

CREATE TABLE EDIAGHEM (
ESTUDIO INTEGER NOT NULL,
ORDEN INTEGER NOT NULL,
GRUPO VARCHAR (1) CHARACTER SET ISO8859_1 NOT NULL COLLATE ISO8859_1,
DIAGNOSTICO VARCHAR (25) CHARACTER SET ISO8859_1 NOT NULL COLLATE ISO8859_1,
GRADO VARCHAR (8) CHARACTER SET ISO8859_1 COLLATE ISO8859_1);


/* Primary keys definition */
ALTER TABLE EDIAGHEM ADD PRIMARY KEY (ESTUDIO, ORDEN, GRUPO, DIAGNOSTICO);

/* Foreign keys definition */
ALTER TABLE EDIAGHEM ADD FOREIGN KEY (GRUPO, DIAGNOSTICO) REFERENCES DIAGHEMO (GRUPO, DIAGNOSTICO);

ALTER TABLE EDIAGHEM ADD FOREIGN KEY (ESTUDIO) REFERENCES ESTUDIO (ESTUDIO);



/* Indices definition */
CREATE INDEX IDX_EDIAGHEM1 ON EDIAGHEM (GRUPO, DIAGNOSTICO);
CREATE INDEX IDX_EDIAGHEM2 ON EDIAGHEM (ESTUDIO);


No doy con la forma de deshabilitar las restricciones.

Gracias por vuestro tiempo y ayuda.
Un saludo.

tcp_ip_es 04-09-2008 11:04:53

si lo que quieres es asociar una acción al actualizar un campo que es foráneo en otra tabla deberás poner por ejemplo algo asi...


Código SQL [-]
ALTER TABLE EDIAGHEM ADD FOREIGN KEY (GRUPO, DIAGNOSTICO) REFERENCES DIAGHEMO (GRUPO, DIAGNOSTICO)ON DELETE CASCADE ON UPDATE CASCADE;

si lo que quieres es hacer un update de tus tablas sin contar con las restricciones que has definido debes borrar esas restricciones y luego volver a crearlas.... http://www.clubdelphi.com/foros/show...r+foreign+keys

juanpe 04-09-2008 11:18:04

Muchas gracias por responder tcp_ip_es.
Mi intención es la segunda.
Voy a hechar un vistazo y os cuento ;)

juanpe 04-09-2008 12:31:00

Cita:

Empezado por tcp_ip_es (Mensaje 311767)
si lo que quieres es asociar una acción al actualizar un campo que es foráneo en otra tabla deberás poner por ejemplo algo asi...


Código SQL [-]ALTER TABLE EDIAGHEM ADD FOREIGN KEY (GRUPO, DIAGNOSTICO) REFERENCES DIAGHEMO (GRUPO, DIAGNOSTICO)ON DELETE CASCADE ON UPDATE CASCADE;


si lo que quieres es hacer un update de tus tablas sin contar con las restricciones que has definido debes borrar esas restricciones y luego volver a crearlas.... http://www.clubdelphi.com/foros/show...r+foreign+keys


Ahora me encuentro con un error diciendo que no reconoce el nombre de la restriccion ::( o eso creo:

Violation foreign key constraint "***unknown***" on table EDIAGHEM

Con el programa ibmanager veo que en restricciones aparece ademas de otros dos esta, que es la que me está dando pal pelo :p
INTEG_78[ESTUDIO]

Por tanto la sql que me da error es la siguiente:

queryaux.SQL.add('alter table ediaghem drop constraint INTEG_78');

He probado con todas las combinaciones y no doy con ello.
Un saludo y gracias.


La franja horaria es GMT +2. Ahora son las 08:17:49.

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