none
no se actualiza la base de datos desde los textbox, pero si desde un datagridview RRS feed

  • Pregunta

  • Hola a todos, como les va? tengo  un problema con una aplicacion en vb 2010 que tiene que actualizar unos datos desde unos textbox. 

    Todos los datos los muestro por textbox, y a la hora de modificarlos, cuando ejecuto el UPDATE, no se guardan. O sea, la cargo de nuevo a la tabla y se carga como si no se hubieran modificado los datos.

    Pero si agrego un datagridview, y los modifico de ahi, si se modifican y se guardan los cambios

    La base de datos es de access

    El codigo es este:

        Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click
            datosTableAdapter.UpdateCommand = New OleDbCommand
            datosTableAdapter.UpdateCommand.Connection = miconexion
            datosTableAdapter.UpdateCommand.CommandText = "UPDATE Clientes SET [razon social]=@raz,direccion=@dir,cuit=@cui,contacto=@con,tel=@tel WHERE codigo=@cod"


            datosTableAdapter.UpdateCommand.Parameters.Add("@raz", OleDbType.VarChar).Value = txraz.Text.ToString
            datosTableAdapter.UpdateCommand.Parameters.Add("@dir", OleDbType.VarChar).Value = txdir.Text.ToString
            datosTableAdapter.UpdateCommand.Parameters.Add("@cui", OleDbType.VarChar).Value = txcui.Text.ToString
            datosTableAdapter.UpdateCommand.Parameters.Add("@tel", OleDbType.VarChar).Value = txtel.Text.ToString
            datosTableAdapter.UpdateCommand.Parameters.Add("@con", OleDbType.VarChar).Value = txcon.Text.ToString

            datosTableAdapter.UpdateCommand.Parameters.Add("@cod", OleDbType.BigInt).Value = txcod.Text.ToString

            datosTableAdapter.Update(clientesDataSet.Tables("clientes"))

            cargar_datos()

            botguardarmod.Enabled = False
            botcancelarmod.Enabled = False
            botnuevo.Enabled = True
            botmodificar.Enabled = True
        End Sub

    No es un codigo muy elaborado, estoy probando para ver como funciona.

    Saludos y gracias por la ayuda

    • Cambiado Enrique M. Montejo lunes, 26 de enero de 2015 7:55 Pregunta relacionada con el acceso a datos.
    jueves, 22 de enero de 2015 0:34

Todas las respuestas

  • hola, a lo que veo todas tus declaraciónes están echas en el dgv, no veo ningún textbox en los parametros.

    también me llama la atención los corchetes en UPDATE Clientes SET [razon social]

    cmd.CommandText = "UPDATE clientes SET razonsocial = @raz,dom = @dom WHERE IdAlumno = @cod" ...
    
    
    'aquí declaras de donde tomas los valores nuevos.
    cmd.Parameters.AddWithValue("@cod", Me.Textbox1.Text)
                            cmd.Parameters.AddWithValue("@raz", Me.Textbox2.Text)
                            cmd.Parameters.AddWithValue("@dom", Me.Textbox3.Text)

    obio deverás declarar lo conexión y el tipo de comando.

    • Propuesto como respuesta Karen Malagón jueves, 22 de enero de 2015 18:51
    jueves, 22 de enero de 2015 9:22
  • Hola, gracias por responder. Hice los cambios que me propusiste, pero sigue sin funcionar, no se que puede estar pasando.

    El codigo para insertar un nuevo registro funciona perfecto, es el de actualizar el que no me anda. Pero si agrego un datagridview, y desde ahi lo modifico, se modifica bien, si lo hago desde un textbox, no se modifica. 

    te dejo el codigo modificado por si hice algo mal

        Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click

            datosTableAdapter.UpdateCommand = New OleDbCommand

            datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=@raz,Direccion=@dir,Cuit=@cuit,Tel=@tel,con=@con WHERE Codigo=@cod"


            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)

            MsgBox(datosTableAdapter.UpdateCommand.CommandText)

            datosTableAdapter.UpdateCommand.Connection = miconexion
            datosTableAdapter.Update(clientesDataSet.Tables("clientes"))

            cargar_datos()

            botguardarmod.Enabled = False
            botcancelarmod.Enabled = False
            botnuevo.Enabled = True
            botmodificar.Enabled = True
        End Sub

    viernes, 23 de enero de 2015 0:20
  • ve si funciona este código. luego pones las condiciones de habilitar o deshabiltar tus botones

        Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click
    
            Using cnn = New OleDb.OleDbConnection(Cadena o string de conexión)
                Dim cmd As New OleDb.OleDbCommand
                cmd.CommandText = = "UPDATE clientes SET RazonSocial = @raz, Direccion = @dir, Cuit = @cuit,Tel = @tel,con = @con WHERE Codigo = @cod"
    
    
                cmd.Parameters.AddWithValue("@raz", Me.txraz.Text)
                cmd.Parameters.AddWithValue("@dir", Me.txdir.Text)
                cmd.Parameters.AddWithValue("@cuit", Me.txcui.Text)
                cmd.Parameters.AddWithValue("@tel", Me.txtel.Text)
                cmd.Parameters.AddWithValue("@con", Me.txcon.Text)
                cmd.Parameters.AddWithValue("@cod", Me.txcod.Text)
    
                Try
                    cnn.Open()
                    cmd.ExecuteNonQuery()
                    MessageBox.Show("Registro actualizado correctamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
                
    
                'botguardarmod.Enabled = False
                'botcancelarmod.Enabled = False
                'botnuevo.Enabled = True
                'botmodificar.Enabled = True
            End Using
        End Sub


    Edito.

    olvide preguntar si tienes un datareader que rellene tus textbox.

    y si lo tienes: lo usas con el evento Leave o KeyPress(Enter)?

    viernes, 23 de enero de 2015 1:14
  • Al utilizar OleDb deberías utilizar marcadores de posición en lugar de parámetros con nombre:

     datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=?,Direccion=?,Cuit=?,Tel=?,con=? WHERE Codigo=?"
    
    
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text)
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text)
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text)
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text)
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text)
             datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)
    

    • Propuesto como respuesta Karen Malagón viernes, 23 de enero de 2015 15:43
    • Votado como útil ale_o10 domingo, 25 de enero de 2015 16:40
    viernes, 23 de enero de 2015 7:04
  • Probe las dos opciones que me pusieron, y no se actualiza, no se que puede estar mal.

    Pongo todo el codigo, quizas algo esta mal en otro lado.

    Imports System.Data.OleDb

    Public Class Clientes
        Private cadenaconexion As String
        Private miconexion As OleDbConnection
        Private datosTableAdapter As OleDbDataAdapter
        Private clientesDataSet As DataSet


        Private Sub Clientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            cadenaconexion = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|Base de datos.accdb"
            miconexion = New OleDbConnection(cadenaconexion)

            datosTableAdapter = New OleDbDataAdapter

            datosTableAdapter.SelectCommand = New OleDbCommand("SELECT * FROM Clientes ORDER BY Codigo", miconexion)


            clientesDataSet = New DataSet

            cargar_datos()



            txnuecod.Visible = False
            txnuecon.Visible = False
            txnuecui.Visible = False
            txnuedir.Visible = False
            txnueraz.Visible = False
            txnuetel.Visible = False
        End Sub

      Private Sub cargar_datos()

            clientesDataSet.Reset()

            clientesDataSet.Tables.Add("clientes")

            datosTableAdapter.Fill(clientesDataSet.Tables("clientes"))


            txcod.DataBindings.Clear()
            txraz.DataBindings.Clear()
            txcui.DataBindings.Clear()
            txdir.DataBindings.Clear()
            txtel.DataBindings.Clear()
            txcon.DataBindings.Clear()
            txcod.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Codigo")
            txraz.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Razon Social")
            txcui.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "CUIT")
            txdir.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Direccion")
            txtel.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "TEL")
            txcon.DataBindings.Add("text", clientesDataSet.Tables("Clientes"), "Contacto")

            lscod.DataSource = clientesDataSet.Tables("clientes")
            lscod.DisplayMember = "Codigo"

            'DataGridView1.DataSource = clientesDataSet.Tables("clientes")
        End Sub

        Private Sub botguardarmod_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botguardarmod.Click

            datosTableAdapter.UpdateCommand = New OleDbCommand

            datosTableAdapter.UpdateCommand.CommandText = "UPDATE clientes SET RazonSocial=?,Direccion=?,Cuit=?,Tel=?,con=? WHERE Codigo=?"


            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@raz", Me.txraz.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@dir", Me.txdir.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cuit", Me.txcui.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@tel", Me.txtel.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@con", Me.txcon.Text)
            datosTableAdapter.UpdateCommand.Parameters.AddWithValue("@cod", Me.txcod.Text)

            MsgBox(datosTableAdapter.UpdateCommand.CommandText)

            datosTableAdapter.UpdateCommand.Connection = miconexion
            datosTableAdapter.Update(clientesDataSet.Tables("clientes"))

            cargar_datos()

            botguardarmod.Enabled = False
            botcancelarmod.Enabled = False
            botnuevo.Enabled = True
            botmodificar.Enabled = True
        End Sub

    End Class

    Gracias por ayudarme. Espero que lo podamos resolver.

    Saludos

    viernes, 23 de enero de 2015 20:40