Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/06/2004, 15:00
natinieves
 
Fecha de Ingreso: abril-2002
Mensajes: 14
Antigüedad: 22 años
Puntos: 0
Pregunta Datos desconectados

Hola,
he empezado a trabajar con datos desconectados. Tengo una base de datos en Access con tres tablas relacionadas: Estudiantes(exp_est, nom_est) con Est_Asig(exp_est, num_asig) y Asignaturas(num_asig, nom_asig) con Est_asig. Es decir, tengo una relación M:N entre estudiantes y asignaturas y los campos subrayados con claves primarias. En mi código de la página ASP .NET he almacenado en un dataset (objAlmacen) las tres tablas incluidas las relaciones. El problema surge cuando actualizo un registro de la tabla Estudiantes. Me da el siguiente error:
Falta DataColumn 'NUM_ASIG' en DataTable 'Estudiantes' para SourceColumn 'NUM_ASIG'.
Tras esto he forzado a actualizar en cascada pero no resuelvo nada. Lo que no entiendo es pq me pide que añada a la tabla ese nuevo campo. Os paso el código a ver si me puede ayudar alguien:
'Genero la conexión
strConexion = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("BaseDatos\colegio.mdb") & ";"
objConexion = New OleDbConnection(strConexion)
strsql = "SELECT * FROM ESTUDIANTES"
'Construyo el comando
objcomando = New OleDbCommand(strsql, objConexion)
'Construyo el adaptador
objAdaptador = New OleDbDataAdapter(objcomando)
objConstructor = New OleDbCommandBuilder(objAdaptador)
objAdaptador = objConstructor.DataAdapter
'Abro la conexion
objConexion.Open()
objAlmacen = New DataSet
'Añado la primera tabla
objAdaptador.Fill(objAlmacen, "Estudiantes")
'Modifico el comando para la siguiente Select
objcomando.CommandText = "SELECT * FROM ASIGNATURAS"
'Añado la segunda tabla
objAdaptador.Fill(objAlmacen, "Asignaturas")
'Modifico el comando para la siguiente Select
objcomando.CommandText = "SELECT * FROM EST_ASIG"
'Añado la tercera tabla
objAdaptador.Fill(objAlmacen, "Estudiantes_Asignaturas")
'cierro la conexión
objConexion.Close()
'Creo las relaciones entre las tablas. Siempre de padre a hijo (1:N). Necesita dos objetos DataColumn
est_asig = New DataRelation("relEstAsig", objAlmacen.Tables("Estudiantes").Columns("exp_est" ), objAlmacen.Tables("Estudiantes_Asignaturas").Colum ns("exp_est"))
asig_est = New DataRelation("relAsigEst", objAlmacen.Tables("Asignaturas").Columns("num_asig "), objAlmacen.Tables("Estudiantes_Asignaturas").Colum ns("num_asig"))

'Añado estos objetos al DataSet

objAlmacen.Relations.Add(est_asig)
objAlmacen.Relations.Add(asig_est)
Dim objRestriccion As ForeignKeyConstraint
objRestriccion = objAlmacen.Tables("Estudiantes_Asignaturas").Const raints("relEstAsig")
objRestriccion.DeleteRule = Rule.Cascade
objRestriccion.UpdateRule = Rule.Cascade

objRestriccion = objAlmacen.Tables("Estudiantes_Asignaturas").Const raints("relAsigEst")
objRestriccion.DeleteRule = Rule.Cascade
objRestriccion.UpdateRule = Rule.Cascade
objAlmacen.EnforceConstraints = True
'Actualizo una determinada fila
objAlmacen.Tables("estudiantes").Rows(0).Item("exp _est") = 1111
Dim Modificadas As DataSet = objAlmacen.GetChanges(DataRowState.Modified)
If Not Modificadas.Tables("estudiantes") Is Nothing Then
objAdaptador.Update(Modificadas, "estudiantes")'Aquí me peta
End If
...
objAlmacen.AcceptChanges()

Gracias de antemano.