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 referencia foranea ! (https://www.clubdelphi.com/foros/showthread.php?t=287)

erickperez6 09-05-2003 22:51:57

Problema con referencia foranea !
 
Saludos, estoy creando una referencia foranea y me desplega el siguiente mensage de error:

Código PHP:

Unsuccessful metadata update
STORE RDB$REF_CONSTRAINTS failed
action cancelled by trigger 
(1to preserve data integrity
Name of Referential Constraint not defined in constraints table
Statement

ALTER TABLE "FINA_FACTURACION_H" ADD FOREIGN KEY ("COMP_ID""CLIE_ID"
REFERENCES FINA_CLIENTES ("COMP_ID""CLIE_ID"

Realmente este mensaje de error no me dice nada, alguien con alguna experiencia parecida que me pueda ayudar?

Gracias

jachguate 09-05-2003 23:23:02

No se si sea esto.. y no tengo forma de probarlo ahora, pero creo que podria ayudarte.. y es que no le estas poniendo nombre al foreign key. No parece lógico, porque el sistema debiera generar un nombre secuencial, pero como el error dice

Cita:

Name of Referential Constraint not defined in constraints table



Código:

ALTER TABLE "FINA_FACTURACION_H" ADD CONSTRANIT NOMBRE_DEL_CONSTRAINT FOREIGN KEY ("COMP_ID", "CLIE_ID")
REFERENCES FINA_CLIENTES ("COMP_ID", "CLIE_ID")


erickperez6 10-05-2003 04:12:38

no, no funciona, es una sentencia invalida :(

kinobi 10-05-2003 11:17:48

Hola,

Cita:

Posteado originalmente por erickperez6
estoy creando una referencia foranea
¿estás creando la clave ajena sobre tablas que ya contienen datos?. Si es así, puede que los datos no cumplan con la regla de integridad referencial que intentas crear y por eso el servidor la rechaza.

Saludos.

erickperez6 10-05-2003 15:13:49

La tabla esta vacia, no contiene ningun dato

kinobi 10-05-2003 18:18:17

Hola,

hum, pues ahora empieza a ser raro. Sólo se me ocurren dos posibilidades:

1. Que "COMP_ID" y "CLIE_ID" no sean clave primaria en FINA_CLIENTES. Aunque creo que debería saltar otro tipo de error.

2. Los metadatos de la base de datos están corruptos. En este último caso, aconsejo una verificación/reparación de la base de datos (gfix), o un backup/restore (gbak).

Saludos.

jachguate 10-05-2003 23:07:26

No te molestes conmigo... pero creo que no estas haciendo ni el minimo esfuerzo por resolver tu problema, sino queres que otros lo resolvamos por vos.

en mi respuesta anterior, te dije que pusieras la siguiente sentencia:

Cita:

ALTER TABLE "FINA_FACTURACION_H" ADD
CONSTRANIT NOMBRE_DEL_CONSTRAINT
FOREIGN KEY ("COMP_ID", "CLIE_ID")
REFERENCES FINA_CLIENTES ("COMP_ID", "CLIE_ID")

sin embargo, la sentencia tiene un error de sintaxis, por lo que el servidor de interbase, correctamente te ha dicho "invalid sentence".

No te voy a decir cual es el error, pues espero que al menos trates de encontrarlo vos mismo...

Hasta luego.

erickperez6 12-05-2003 14:20:40

Disculpame si no me supe expresar apropiadamente, por su puesto, luego de postear el mensage donde indicaba que la instruccion estaba incorrecta probe con el codigo SQL correcto el cual es el siguiente:

Código PHP:

ALTER TABLE "FINA_FACTURACION_H" ADD CONSTRAINT 
FINA_FACT_CLIE FOREIGN KEY 
("COMP_ID""CLIE_ID"
REFERENCES FINA_CLIENTES ("COMP_ID""CLIE_ID"

Pero como quiera sigue apareciendo el error, hice un backup y un restore a la base de datos y todavia el error aparecia. Verifique con el GFIX si existia algun error en la DB con el siguiente comando:

gfix -v -full "C:\midb.gdb" y no me desplego ningun mensaje de error que podia exisistir en la DB.

Esta DB es un poco grande, consta de unas 50 tablas y todas estan referenciadas, algunas tablas tienen unas 4 o 5 referencias foraneas, pero solo he tenido problema al crear esta, pienso que el problema debe de estar en alguna referencia de otra tabla la cual no me deja crear esta para conservar la integridad, pero no le veo mucho sentido ya que los campos "COMP_ID" y "CLIE_ID" de la tabla "FINA_CLIENTES" esta siendo referenciada por otra tabla sin ningun problema.

kinobi 12-05-2003 14:34:51

Hola,

en la Borland Developer Network he encontrado una referencia de un problema similar al tuyo, aunque referido a la versión 4 de InterBase.

Te pongo el enlace porque es tan similar que es probable que pueda ayudarte ...

http://bdn.borland.com/article/0,1410,25303,00.html

Saludos.

erickperez6 12-05-2003 16:14:25

Gracias a todos !

Ya encontre el problema, extraje toda la metadata de la DB y observe que en la tabla "FINA_CLIENTES" habia un indice unico con los campos "COMP_ID" y "CLIE_ID", aparte del primary key que hace la misma funcion, entonces borre este indice unico y problema resuelto.

kinobi 12-05-2003 17:52:21

Hola,

gracias por la información.

Tomo nota del asunto, ya que resulta extraño y sin lógica (aparente).

Saludos.


La franja horaria es GMT +2. Ahora son las 14:20:00.

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