Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE

Estas en el tema de Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE en el foro de Bases de Datos General en Foros del Web. Hola a todo el mundo de nuevo: Quiero crear tablas en access mediante código usando DDL y necesito establecer una FOREIGN KEY en un campo ...
  #1 (permalink)  
Antiguo 22/09/2011, 05:34
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE

Hola a todo el mundo de nuevo:

Quiero crear tablas en access mediante código usando DDL y necesito establecer una FOREIGN KEY en un campo de dicha tabla y establecer ON UPDATE CASCADE ON DELETE CASCADE en la clausa CONSTRAINT de dicho campo.

Si únicamente establezco el FOREIGN KEY, la tabla se me crea correctamente, pero si pongo el ON UPDATE CASCADE ON DELETE CASCADE, al ejecutar la sentencia DDL me da error en la parte CONSTRAINT.

He visto que esto pasa si en las opciones de ACCESS no marcamos la opción "Sintaxis compatible con SQL Server (ANSI 92)", asi que la he marcado y el error de la parte CONSTRAINT me desaparece y la tabla se me crea correctamente, con actualización en cascada y eliminación en cascada.

Todo este rollo ha sido para poneros en situación. Ahora paso a exponer lo que realmente quiero conseguir, que no se si es posible o no.

Realmente, las tablas las quiero crear en una base de datos distinta de aquella en la que ejecuto el código, pero cuando se va a ejecutar la instrucción DDL para la creación de la tabla, me da el error en la parte CONSTRAINT, aunque la opción de access "Sintaxis compatible con SQL Server (ANSI 92)" esté marcada para esa base de datos destino.

¿Alguien sabe en qué me puedo estar equivocando?

Como siempre muchas gracias.
  #2 (permalink)  
Antiguo 26/09/2011, 11:15
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE

Yo recomiendo crear las llaves foráneas aparte del create table, esto es:
creando el índice correspondiente y asignándole la restricción de FK.
y hacer esto luego de creadas todas las tablas.

dicho gráficamente sería crear todas las tablas independientes y después unirlas con los FK.

espero se entienda, ando un poco mareado hoy xD!
  #3 (permalink)  
Antiguo 27/09/2011, 03:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE

Hola Ribon, gracias por tu resouesta.

Creo que te he entendido, pero me sigue sin funcionar. Este es el código que estoy usando:

---------------------------------------------------------------------------------------

Private Sub Comando7_Click()

Dim dbsMiBaseDatos As DAO.Database
Dim miselect As String

Set dbsMiBaseDatos = DBEngine.OpenDatabase("C:\A.accdb")

'----------------------------------------------
'----------------------------------------------


'Creamos la tabla Equipos
miselect = "CREATE TABLE Equipos (CodEquipos Autoincrement PRIMARY KEY, NombreEquipo Text(255));"
dbsMiBaseDatos.Execute miselect

'----------------------------------------------
'----------------------------------------------

'Creamos la tabla Equipos_Integrantes
miselect = "CREATE TABLE Equipos_Integrantes (CodEquiposIntegrantes Autoincrement PRIMARY KEY, CodEquipos Long, CodResponsable Long);" dbsMiBaseDatos.Execute miselect

miselect = "ALTER TABLE Equipos_Integrantes ADD CONSTRAINT FKCodEquipos FOREIGN KEY (CodEquipos) REFERENCES Equipos (CodEquipos) ON UPDATE CASCADE ON DELETE CASCADE;"
dbsMiBaseDatos.Execute miselect


dbsMiBaseDatos.Close
Set dbsMiBaseDatos = Nothing

End Sub

--------------------------------------------------------------------------------------



Cuando ejecuto es te código me da el siguiente mendaje de error:

Se ha producido el error 3289 en tiempo de ejecución.
Error de sintaxis en la cláusula CONSTRAINT.

Pero si no pongo el "ON UPDATE CASCADE ON DELETE CASCADE", este error no se produce y si me genera la relación entre las dos tablas.

¿Sabes qué puede estar pasando?.

Gracias y un saludo.
  #4 (permalink)  
Antiguo 27/09/2011, 07:01
 
Fecha de Ingreso: marzo-2007
Mensajes: 127
Antigüedad: 17 años, 1 mes
Puntos: 2
Respuesta: Me da un error el ON UPDATE CASCADE y el ON DELETE CASCADE

¡¡¡YA LO HE SOLUCIONADO!!!

El código es el que sigue:

--------------------------------------------------------------------------------

Private Sub Comando7_Click()

Dim dbsMiBaseDatos As DAO.Database
Dim RelNew As Relation
Dim miselect As String

Set dbsMiBaseDatos = DBEngine.OpenDatabase("C:\A.accdb")

'----------------------------------------------
'----------------------------------------------


'Creamos la tabla Equipos
miselect = "CREATE TABLE Equipos (CodEquipos Autoincrement PRIMARY KEY, NombreEquipo Text(255));"
dbsMiBaseDatos.Execute miselect

'----------------------------------------------
'----------------------------------------------

'Creamos la tabla Equipos_Integrantes
miselect = "CREATE TABLE Equipos_Integrantes (CodEquiposIntegrantes Autoincrement PRIMARY KEY, CodEquipos Long, CodResponsable Long);" dbsMiBaseDatos.Execute miselect

With dbsMiBaseDatos
Set RelNew = .CreateRelation("FKCodEquipos", "Equipos", "Equipos_Integrantes", dbRelationUpdateCascade + dbRelationDeleteCascade)
RelNew.Fields.Append RelNew.CreateField("CodEquipos")
RelNew.Fields!CodEquipos.ForeignName = "CodEquipos"
.Relations.Append RelNew
End With


dbsMiBaseDatos.Close
Set dbsMiBaseDatos = Nothing


End Sub

---------------------------------------------------------------------------------

Espero que sirva a más gente, ya que he visto en Internet que este problema que yo tenía se le presentaba a mucha gente.

Saludos a todos y gracias

Etiquetas: access, cascade, delete, sql, tabla, update, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:23.