Problema con llave foraneas en MySQL

Matapatos

Lanero Reconocido
20 Feb 2005
945
Que tal amigos
tengo un problema con la creacion de unas tablas en MySQL 5.1, al momento de meter estas tablas
CREATE TABLE entrada
(
nombre VARCHAR(30) NOT NULL,
tipo VARCHAR(10) NOT NULL,
CONSTRAINT pk_ent
PRIMARY KEY (nombre)
);

CREATE TABLE apuntes
(
nombre VARCHAR(30) NOT NULL,
apuntes VARCHAR(40) NOT NULL,
CONSTRAINT pk_apu
PRIMARY KEY (nombre,apuntes),
CONSTRAINT fk_apu
FOREIGN KEY(nombre)
REFERENCES entrada (nombre)
);

CREATE TABLE entradaapuntes
(
nombre VARCHAR(30) NOT NULL,
apuntes VARCHAR(40) NOT NULL,
CONSTRAINT pk_ea
PRIMARY KEY (nombre,apuntes),
CONSTRAINT fk_ea_en
FOREIGN KEY (nombre)
REFERENCES entrada (nombre),
CONSTRAINT fk_ea_ap
FOREIGN KEY (apuntes,nombre)
REFERENCES apuntes (apuntes,nombre)
);
me da un error en la tercera tabla (entradaapuntes) el error en errno 150, la verdad es que apenas empiezo en esto de MySQL y no tengo idea de que podra estar generando este error ¿Alguien que me pueda ayudar?

Les agradezco de antemano.
 

huracancorp

Lanero Regular
12 Nov 2006
83
Viejo acabo de meter tu script de creación de tablas y me funciono perfectamente es mas estoy corriendo el script en una versión anterior a la 5.1
 

Matapatos

Lanero Reconocido
20 Feb 2005
945
... Decidi eliminar la tabla entradaapuntes debido a que sus campos son muy parecidos (por no decir iguales) a los de la tabla apuntes y ahora si corre sin ningun problema, pero el problemas ahora esta en la creacion de la conexion con la base de datos de MySQL y Visual Basic 2005
 

huracancorp

Lanero Regular
12 Nov 2006
83
Mira puedes incluir este codigo en un modulo:

Public rs As ADODB.Recordset
Public db As ADODB.Connection
Public st As ADODB.Recordset

Public Sub Main()
On Error GoTo error
Set db = CreateObject("adodb.connection")
db.Open "DSN=nombredns"
Set rs = New ADODB.Recordset
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
cod = ""
Exit Sub
error:
MsgBox "No se puede conectar a la base de datos, la aplicación no funcionara correctamente"
End
End Sub

en donde "nombredns" es el nombre del DSN creado en los origenes de datos del servidor.
 

edgnet

Lanero Reconocido
14 Sep 2004
282
prueba con esto


CREATE TABLE entradaapuntes ( nombre VARCHAR(30) NOT NULL, apuntes VARCHAR(40) NOT NULL, CONSTRAINT pk_ea PRIMARY KEY (nombre,apuntes), CONSTRAINT fk_ea_en FOREIGN KEY (nombre) REFERENCES entrada (nombre), CONSTRAINT fk_ea_ap FOREIGN KEY (nombre) REFERENCES apuntes (nombre) );


parece que hay problems con la llave foranea apuntando a "apuntes"
 

edgnet

Lanero Reconocido
14 Sep 2004
282
CREATE TABLE `prue`.`entradaapuntes` ( `nombre` VARCHAR(30) NOT NULL, `apuntes` VARCHAR(40) NOT NULL, PRIMARY KEY(`nombre`, `apuntes`), CONSTRAINT `FK_entradaapuntes_1` FOREIGN KEY `FK_entradaapuntes_1` (`nombre`) REFERENCES `entrada` (`nombre`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FK_entradaapuntes_2` FOREIGN KEY `FK_entradaapuntes_2` (`nombre`,`apuntes`) REFERENCES `apuntest` (`nombre`,`apuntes`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB;


mira... creo que ya corregi el error. ... prueba con esta instruccion ... a mi si me funciona al 100 ... crea las tablas con las referencias que intentas crear