none
Table Adapter no actualiza los cambios hechos en DataTable o DataSet a la base de datos Access RRS feed

  • Pregunta

  • Buenos días he buscado acerca del problema que tengo pero no consigo encontrarle solución.

    Estoy utilizando en un proyecto una base de datos Access. En un formulario lleno de controles lleno los datos de una tabla y puedo ver todos los registros utilizando un BindingNavigator.

    He utilizado un DataTable y el adapter no me realiza los cambios en la base de datos.

    Justo antes de llamar a adapter.update (datatable) , si miro los datos que contiene el datatable, estos son correctos, con todos lo cambios que hago en los campos del formulario. No me lanza ningún error, simplemente no me actualiza los cambios en la base de datos.

    Si creo un nuevo registro (tengo un botón en el formulario para nuevo registro), el Insert si me funciona (crea el nuevo registro en la tabla).

    Pero no hay manera con el update. He probado a utilizar tanto DataSets cómo DataTables y no hay manera. Éste es el código del update:

    Private Function SOLICITUDUpdateData(ByVal dt As DataTable) As Integer
    
            Try
                Using conexion As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\pdc\PDC_DATOS.accdb")
    
                    Dim cmd As OleDbCommand = conexion.CreateCommand()
                    cmd.CommandText = "SELECT * FROM TABLA"
    
                    Dim adapterSAVE As New OleDbDataAdapter(cmd)
    
                    Dim builder As New OleDbCommandBuilder(adapterSAVE)
                    builder.QuotePrefix = "["
                    builder.QuoteSuffix = "]"
    
                    adapterSAVE.UpdateCommand = builder.GetUpdateCommand()
    
                    conexion.Open()
    
                    MsgBox(adapterSAVE.UpdateCommand.CommandText, , "PDC")
    
                    Return SOLICITUDadapterSAVE.Update(dt)
    
                    conexion.Close()
    
                End Using
            Catch
                Throw
            End Try
        End Function

    En el msgbox me aparecen todo interrogantes, es decir: nombre_campo1 = ?; nombre_campo2 = ?, etc...

    ¿Alguna idea? Muchas gracias por anticipado.


    lunes, 30 de septiembre de 2013 10:50

Todas las respuestas

  • En el msgbox me aparecen todo interrogantes, es decir: nombre_campo1 = ?; nombre_campo2 = ?, etc...

    la parte importante del UPDATE es el WHERE ya que alli determina que registro afectara en la actualizacion

    cuando ves el commandext en el msgbox que campo observas define en el WHERE, valida que sea el cmapo key de la tabla

    valida tambien que en el datatable que asignas al SOLICITUDadapterSAVE.Update() defines ese campo que se usa en el WHERE con un valor que exista como registro

    ---

    cuando pasa por

     Return SOLICITUDadapterSAVE.Update(dt)

    que valor integer retorna ? es un 0 o algun valor igual o mayor a 1 ? si es cero esta claro que no afecto ningun registro

    pero si es 1 o superior entonces si realizo el update

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 30 de septiembre de 2013 11:02
  • Hola Leandro gracias por tu respuesta, te cuento:

    Si miro el datatable en tiempo de ejecución justo antes de hacer el update toda la información está ahí.

    El msgbox del commandtext me muestra lo siguiente:

    http://farm8.staticflickr.com/7356/10017770565_2d7be23058_o.jpg (no me deja poner imágenes ni links)

    El nombre de la tabla es SOLICITUD

    El campo clave es IdProcCambio.

    El valor que me devuelve el return es 0.

    lunes, 30 de septiembre de 2013 11:34
  • ¿Alguna idea para resolver esto? He probado de todo y no hay manera que actualice la BD... si inserta un nuevo registro (en blanco) pero al intentar hacer el update no actualiza el datatable a la BD...
    jueves, 24 de octubre de 2013 10:03