Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2008
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Error 1005, problemas creando una tabla.

Que tal, después de algun tiempo ausente en el foro me veo en la necesidad de pedirles un poco de ayuda a resolver este problema.

Me he diseñado la Base de Datos utilizando MySQL Workbench (muy bueno por cierto, lo recomiendo) ya la tenía funcionando pero decidí "optimizarla" de manera tal que podría ahorrarme algunos campos y hacer mas "pequeñas" las consultas, pero, ahora que ya la tengo lista de nuevo cuando intento crear las tablas me da algunos errores (la mayoría los he solucionado) pero con este si me quedé trabado:

Código:
  #1005 - Can't create table './xxx/vehiculo.frm' (errno: 150)

La tabla en cuestión es la siguiente:

Código SQL [-]
-- -----------------------------------------------------
-- Table `xxx`.`vehiculo`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `xxx`.`vehiculo` (
  `CodVehiculo` INT NOT NULL,
  `CodLineaVehiculo` INT NOT NULL ,
  `CodDano` VARCHAR(2) NOT NULL ,
  `CodTitulo` VARCHAR(2) NOT NULL ,
  `LocalidadSubasta` VARCHAR(3) NOT NULL ,
  `FechaSubasta` VARCHAR(8) NOT NULL ,
  `Odometro` INT NULL ,
  `PrecioVenta` FLOAT(7,2) NULL ,
  `Modelo` INT NOT NULL ,
  `Activo` BOOLEAN NOT NULL DEFAULT false ,
  INDEX fk_vehiculo_linea_vehiculo (`CodLineaVehiculo` ASC) ,
  PRIMARY KEY (`CodVehiculo`) ,
  INDEX fk_vehiculo_dano (`CodDano` ASC) ,
  INDEX fk_vehiculo_titulo (`CodTitulo` ASC) ,
  INDEX fk_vehiculo_subasta (`FechaSubasta` ASC, `LocalidadSubasta` ASC) ,
  CONSTRAINT `fk_vehiculo_linea_vehiculo`
    FOREIGN KEY (`CodLineaVehiculo` )
    REFERENCES `xxx`.`linea_vehiculo` (`CodLineaVehiculo` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_vehiculo_dano`
    FOREIGN KEY (`CodDano` )
    REFERENCES `xxx`.`dano` (`CodDano` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_vehiculo_titulo`
    FOREIGN KEY (`CodTitulo` )
    REFERENCES `xxx`.`titulo` (`CodTitulo` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_vehiculo_subasta`
    FOREIGN KEY (`FechaSubasta` , `LocalidadSubasta` )
    REFERENCES `xxxn`.`subasta` (`Fecha` , `CodLocalidad` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Los cambios que se hicieron en esta tabla fueron cambiar el tipo de dato de los campos 'CodDano' y 'CodTitulo' de INT a VARCHAR(2). El cambio tambien se realizó en las tablas respectivas ('dano' y 'titulo'), siendo la estructura de estas la siguiente:

Código SQL [-]
-- -----------------------------------------------------
-- Table `xxx`.`dano`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `xxx`.`dano` (
  `CodDano` VARCHAR(2) NOT NULL,
  `Dano` VARCHAR(20) NOT NULL ,
  `DescripcionDano` VARCHAR(255) NOT NULL ,
  PRIMARY KEY (`CodDano`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `xxx`.`titulo`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `xxx`.`titulo` (
  `CodTitulo` VARCHAR(2) NOT NULL,
  `NombreTitulo` VARCHAR(45) NULL ,
  `DescripcionTitulo` VARCHAR(255) NULL ,
  PRIMARY KEY (`CodTitulo`) )
ENGINE = InnoDB;


Ya di vueltas por todos lados y no he podido solucionar.

La ayuda de MySQL dice lo siguiente:
Cita:
Empezado por Ayuda de MySQL
1005 (ER_CANT_CREATE_TABLE)
No se puede crear la tabla. Si el mensaje del error hace referencia al errno 150, la creación de la tabla falló debido a una restricción de clave foránea incorrectamente formulada.
[enlace]

Pero, ¿cual de las llaves foráneas está mal?

¿Alguien sabe que tengo mal?

Saludos
Responder Con Cita
  #2  
Antiguo 13-03-2008
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Bueno, después de probar una cosa tras otra he identificado que la llave foránea que está mal es esta:

Código SQL [-]
         CONSTRAINT  `fk_vehiculo_subasta`  FOREIGN  KEY (  `FechaSubasta` ,  `LocalidadSubasta`  )  REFERENCES  `xxx`.`subasta` ( `FechaSubasta` ,
 `CodLocalidad` 
) ON  DELETE NO ACTION  ON  UPDATE NO ACTION

Creé la tabla sin llaves foráneas y luego fui agregando una por una hasta que esta me dio el mismo error que antes, ahora, ¿Que es lo que está mal?, ¿Alguien sabe?

Edito:
Se me había olvidado colocar la estructura de la tabla 'subasta', esta es la siguiente:

Código SQL [-]
CREATE  TABLE IF NOT EXISTS `xxx`.`subasta` (
  `CodLocalidad` VARCHAR(3) NOT NULL ,
  `FechaSubasta` VARCHAR(8) NOT NULL ,
  `Activa` BOOLEAN NULL DEFAULT false,
  INDEX fk_subasta_localidad_subasta (`CodLocalidad` ASC) ,
  PRIMARY KEY (`CodLocalidad`, `FechaSubasta`) ,
  CONSTRAINT `fk_subasta_localidad_subasta`
    FOREIGN KEY (`CodLocalidad` )
    REFERENCES `xxx`.`localidad_subasta` (`CodLocalidad` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Saludos

Última edición por D-MO fecha: 13-03-2008 a las 19:04:31.
Responder Con Cita
  #3  
Antiguo 13-03-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
No sé si tenga algo que ver o no, pero, ¿no afecta el orden en que listas los campos en la definición de la llave foránea? No me suena muy lógico pero como el índice en la tabla referenciada está en el orden inverso...

Bye

pd: ¡Felicidades!
Responder Con Cita
  #4  
Antiguo 13-03-2008
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por keyboy Ver Mensaje
No sé si tenga algo que ver o no, pero, ¿no afecta el orden en que listas los campos en la definición de la llave foránea? No me suena muy lógico pero como el índice en la tabla referenciada está en el orden inverso...
Pues en efecto, el error residía en el orden, aquí otro ejemplo de que las cosas mas sencillas nos provocan unos grandes dolores de cabeza .

Muchas gracias Keyboy por haberlo notado.
Cita:
Empezado por keyboy Ver Mensaje

pd: ¡Felicidades!
Gracias

Saludos
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 creando un control activeX harpo API de Windows 0 19-02-2007 22:24:32
Problemas creando una DLL jorllazo Varios 1 14-10-2006 12:03:32
problemas creando una conexion ODBC andressanchez Conexión con bases de datos 5 06-10-2005 19:19:43
Creando una tabla paradox weke Tablas planas 5 12-05-2004 07:27:41
Error --->1005/20/03 no es fecha válida TIKIMORE SQL 3 20-06-2003 17:09:33


La franja horaria es GMT +2. Ahora son las 01:53:55.


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