PDA

Ver la Versión Completa : Problema con referencia foranea !


erickperez6
09-05-2003, 22:51:57
Saludos, estoy creando una referencia foranea y me desplega el siguiente mensage de error:


Unsuccessful metadata update
STORE RDB$REF_CONSTRAINTS failed
action cancelled by trigger (1) to 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

Name of Referential Constraint not defined in constraints table





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,

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:

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:


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.