Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Error al definir una FOREIGN KEY

Tengo un BB.DD. en FB 2.5 con estas dos tablas:
Código:
CREATE TABLE Poblacion (CodPrv VARCHAR(2) DEFAULT '99' NOT NULL, Codigo INTEGER NOT NULL, 
Nombre VARCHAR(65) NOT NULL, Cpostal VARCHAR(10) NOT NULL, Pais VARCHAR(2) DEFAULT 'PD, 
CONSTRAINT PK_Poblacion PRIMARY KEY (CodPrv, Codigo))
Código:
CREATE TABLE DatLoc (CodPrv VARCHAR(2) DEFAULT '99' NOT NULL, Poblacion INTEGER NOT NULL, 
Actualiza TIMESTAMP, Padron INTEGER, Censo INTEGER, Concejales SMALLINT, 
Afiliados SMALLINT, Alcalde VARCHAR(60), Partido SMALLINT DEFAULT 1, 
Constitucion DATE, Sede VARCHAR(40), TlfSede VARCHAR(10), 
Presidente VARCHAR(60), TlfPres VARCHAR(10), Portavoz VARCHAR(60), 
TlfPort VARCHAR(10), Observaciones BLOB SUB_TYPE 1, 
CONSTRAINT PK_DatLoc PRIMARY KEY (CodPrv, Poblacion))
Y necesito definir una clave externa de la siguiente forma:
Código:
ALTER TABLE DATLOC ADD CONSTRAINT FK_DATLOC 
FOREIGN KEY (CODPRV,POBLACION) REFERENCES POBLACION(CODPRV,CODIGO) 
ON DELETE CASCADE ON UPDATE CASCADE;
Sin embargo, al ejecutar ese código me está dando este error:
Cita:
Unsuccessful metadata update.
Partner index segment no 1 has incompatible data type.

SQL Code: -607
IB Error Number: 335544351
El código del ALTER TABLE es el que me ha generado el propio SQL Manager y no acabo de ver dónde está el problema.
Responder Con Cita
  #2  
Antiguo 07-04-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
CREATE TABLE Poblacion (
CodPrv VARCHAR(2) DEFAULT '99' NOT NULL,
Codigo INTEGER NOT NULL,
Nombre VARCHAR(65) NOT NULL,
Cpostal VARCHAR(10) NOT NULL,
Pais VARCHAR(2) DEFAULT 'PD, // <--- No has cerrado la comilla
CONSTRAINT PK_Poblacion PRIMARY KEY (CodPrv, Codigo))
Responder Con Cita
  #3  
Antiguo 07-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Esa errata ya la tengo corregida. De todas formas, cuando he ejecutado el ALTER TABLE ambas tablas ya existían. No acabo de ver dónde está el error. Lo que entiendo del mensaje de error es que los tipos de datos son distintos o ¿estoy equivocado?
Responder Con Cita
  #4  
Antiguo 07-04-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Acabo de ejecutar tu código en un script:
Código SQL [-]
SET TERM ^ ;

CREATE TABLE POBLACION (
  CODPRV VARCHAR(2) DEFAULT '99' NOT NULL,
  CODIGO INTEGER NOT NULL,
  NOMBRE VARCHAR(65) NOT NULL,
  CPOSTAL VARCHAR(10) NOT NULL,
  PAIS VARCHAR(2) DEFAULT 'PD',
  CONSTRAINT PK_Poblacion PRIMARY KEY (CODPRV, CODIGO)
)^

CREATE TABLE DATLOC (
  CODPRV VARCHAR(2) DEFAULT '99' NOT NULL,
  POBLACION INTEGER NOT NULL,
  ACTUALIZA TIMESTAMP,
  PADRON INTEGER,
  CENSO INTEGER,
  CONCEJALES SMALLINT,
  AFILIADOS SMALLINT,
  ALCALDE VARCHAR(60),
  PARTIDO SMALLINT DEFAULT 1,
  CONSTITUCION DATE,
  SEDE VARCHAR(40),
  TLFSEDE VARCHAR(10),
  PRESIDENTE VARCHAR(60),
  TLFPRES VARCHAR(10),
  PORTAVOZ VARCHAR(60),
  TLFPORT VARCHAR(10),
  OBSERVACIONES BLOB SUB_TYPE 1,
  CONSTRAINT PK_DATLOC PRIMARY KEY (CODPRV, POBLACION)
) ^

ALTER TABLE DATLOC ADD CONSTRAINT
FK_DATLOC FOREIGN KEY(CODPRV, POBLACION)
REFERENCES POBLACION(CODPRV, CODIGO)
ON DELETE CASCADE ON UPDATE CASCADE ^

SET TERM ;^
y, aunque personalmente le daría otro nombre a la columna 'POBLACION' de la tabla DATLOC, no me genera ningún error en IBExpert .

Mi consulta es: ¿ Alguna de las tablas involucradas posee datos previos al momento de aplicar la nueva restricción ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 07-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Sí, la taba Poblacion tiene datos. Es una aplicación que ya está funcionando y hay que ampliar la base de datos con tablas nuevas.
Responder Con Cita
  #6  
Antiguo 07-04-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Podría ser que algunos datos no cumplieran con la nueva restricción y eso te estuviera dando error. Por mi parte forcé la situación y el error que me genera IBExpert al aplicar la nueva restricción es:
Cita:
No es posible confirmar la transacción:
violation of FOREIGN KEY constraint "".
violation of FOREIGN KEY constraint "FK_DATLOC" on table "DATLOC".
Foreign key reference target does not exist.
Problematic key value is ("CODPRV" = '01', "POBLACION" = 3).
Sin embargo, el mensaje de error que publicas indica que la columna de la clave externa que estas creando es de diferente tipo al de la clave principal a que referencia, mas explayado aquí: Partner index segment no 1 has incompatible data type.

De todos modos podrías crear dos nuevas tablas sin datos (a modo de prueba) e intentar aplicarle la restricción y ver si te genera el error.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



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
Error al definir un FK en Firebird 2.5 Angel.Matilla Firebird e Interbase 10 29-11-2016 13:13:26
Error al intentar borrar constraint foreign key rfernandez Firebird e Interbase 5 08-10-2008 23:36:02
error al crear foreign key en firebird carlo_acp Conexión con bases de datos 2 23-02-2008 02:58:08
error de violation of foreign key constraint... en ibx Arturo Firebird e Interbase 1 07-12-2004 19:38:57
uso de FOREIGN KEY jzginez Firebird e Interbase 2 22-04-2004 23:20:25


La franja horaria es GMT +2. Ahora son las 01:38:24.


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