Visual Basic - Error al depurar: "Una consulta UPDATE o DELETE no

Life is soft - evento anual de software empresarial
 
Vista:

Error al depurar: "Una consulta UPDATE o DELETE no

Publicado por Nico (1 intervención) el 04/12/2008 14:49:48
Hola. Soy muy novato en la programación en VB y en especial .net . He estado elaborando un programita de prueba en VB 2008 Express. Este programa se conecta a una base de datos de Microsoft Access 2007.
Mi problema es que al actualizar manualmente un valor de una fila y columna dada, en el momento que el programa ejecuta "Me.TableAdapterManager.UpdateAll" se detiene y me sale el mensaje: "Una consulta UPDATE o DELETE no puede contener un campo multivalor".
He buscado información al respecto y he hecho muchas pruevas pero sin resultado positivo y no tengo ni idea de como resolverlo. Agradecería mucho cualquier ayuda.

Este proyecto llamado prueba5 contiene un formulario que lo que hace es manipular los datos de una tabla llamada "tbl_visitas" y de otra tabla llamada "tbl_ciudades_".

Todo funciona bien hasta que modifico alguna casilla del checkedlistbox "clb_ciudades" y le doy al boton guardar del BindingNavigator. He tenido que actualizar los valores del checkedlistbox manualmente porque no sé como enlazarlo a los datos automáticamente como en los listbox.

El esquema de los datos es el siguiente:

tbl_ciudades_
· CiudadesID
· Ciudad
· Provincia
· Pais

tbl_visitas_
· id_visita
· Nombre
· CiudadesID

El campo tbl_visitas_.ciudadesID es de tipo string y contiene índices de tbl_ciudades.CiudadesID separados por ";"

Al añadir crear las conexiones a la base de datos y añadir las tablas al Dataset, Visual Studio añadió automáticamente los siguientes objetos:

Prueba5DataSet
Tbl_ciudades_TableAdapter
Tbl_visitasTableAdapter
TblciudadesBindingSource
Tbl_visitasBindingSource
TableAdapterManager
Tbl_visitasBindingNavigator
Adjunto parte deñ código que creo que está involucrado en el error:

Private Sub clb_ciudades_SelectedIndexChanged _
(ByVal sender As
System.Object, ByVal e As
System.EventArgs) _
Handles clb_ciudades.SelectedIndexChanged

Dim CiudadesID_str As String = ("")
For Each item
As Object In clb_ciudades.CheckedItems
Dim index As Int32 = clb_ciudades.Items.IndexOf(item)
If CiudadesID_str.Length = 0 Then
CiudadesID_str = index + 1
Else
CiudadesID_str = CiudadesID_str & ";" & (index + 1)
End If
Next
'Si comento la linea siguiente, no tengo ningun error
pero los items marcados
'del checkedlistbox se graban en el dataset pero no en
el fichero de access.
Me.Prueba5DataSet.tbl_visitas.Rows_
(Posicion - 1)("ciudadesID") = CiudadesID_str
CiudadesID_str = ""
End Sub

Private Sub Tbl_visitasBindingNavigatorSaveItem_Click _
(ByVal sender As
System.Object, ByVal e As
System.EventArgs) _
Handles Tbl_visitasBindingNavigatorSaveItem.Click

Me.Validate()
Me.Tbl_visitasBindingSource.EndEdit()
'Después de la línea de a continuación ocurre el error
Me.TableAdapterManager.UpdateAll(Me.Prueba5DataSet)
End Sub

Un saludo,
Nico.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error al depurar:

Publicado por igor (633 intervenciones) el 04/12/2008 21:10:09
Nuevamente recordamos que este es el foro de VB6, no el de NET.

Te recomiento que redefinas las tablas del origen de base de datos y que lo hagas con el asistente de NET. Siguiendo la política de Microsoft, NET no acepta de buen grado que modifiques manualmente el código generado por el asistente, si lo haces corres el riesgo de este tipo de "accidentes" y te aseguro que NET ganará la partida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar