none
Problema con update en MySql RRS feed

  • Pregunta

  • Hola como estan, les explico tengo un problema que no logro resolver, tengo un codigo que utilizo para actualizar registro en mi base de datos pero cuando le doy ejecutar este no hace nada y si se conecta con la BD, que podra ser, me echan una mano??

    Gracias a todos!

        Private Sub Modificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Modificar.Click
            Try
                myconexion = New MySql.Data.MySqlClient.MySqlConnection(conexion)
                myconsulta = "UPDATE registro SET nombre = ?nombre ,apellido= ?apellido ,telefono= ?telefono,email=?email,usuario= ?usuario,contraseña=?contraseña WHERE nombre = '" + TextBox1.Text + "'"
                mycomando = New MySqlCommand(myconsulta, myconexion)
                mycomando.Parameters.Add("?nombre", MySqlDbType.VarChar, 45).Value = TextBox1.Text
                mycomando.Parameters.Add("?apellido", MySqlDbType.VarChar, 45).Value = TextBox2.Text
                mycomando.Parameters.Add("?telefono", MySqlDbType.VarChar, 45).Value = TextBox3.Text
                mycomando.Parameters.Add("email", MySqlDbType.VarChar, 25).Value = TextBox4.Text
                mycomando.Parameters.Add("?usuario", MySqlDbType.VarChar, 35).Value = TextBox5.Text
                mycomando.Parameters.Add("?contraseña", MySqlDbType.VarChar, 45).Value = TextBox6.Text
                mycomando.Connection = myconexion
                myconexion.Open()
                mycomando.ExecuteNonQuery()
                mycomando.Connection.Close()
                Dim Result As DialogResult
                Result = MessageBox.Show("Los datos del usuario se han modificado con exito", "Mensaje del Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information)
                If Result = System.Windows.Forms.DialogResult.OK Then
                    TextBox1.Clear()
                    TextBox2.Clear()
                    TextBox3.Clear()
                    TextBox4.Clear()
                    TextBox5.Clear()
                    TextBox6.Clear()
                End If
            Catch ex As Exception
                MessageBox.Show("SE HA GENERADO UN ERROR: " + ex.Message)
            End Try
    
        End Sub

    domingo, 21 de octubre de 2012 4:00

Respuestas

  • lo que me pregunto es porque usas parametreo para todo menos para el ultimo valor del WHERE ?

    alli tambien debes usar parametros

    -----

    ademas podrias usar

    Dim afectados As Integer = mycomando.ExecuteNonQuery()

    If afectados >0 Then

    MessageBox.Show("se actualizo el registro")

    Else

    Messagebox.Show("NO se actualizo el registro")

    End If

    si pasa por la no actualizacion quiere decir que el WHERE esta fallando porque no encuantra ninguna registro con el valor de nobmre que proporcionas


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Eduard Sifontes sábado, 27 de octubre de 2012 3:24
    domingo, 21 de octubre de 2012 4:21

Todas las respuestas

  • lo que me pregunto es porque usas parametreo para todo menos para el ultimo valor del WHERE ?

    alli tambien debes usar parametros

    -----

    ademas podrias usar

    Dim afectados As Integer = mycomando.ExecuteNonQuery()

    If afectados >0 Then

    MessageBox.Show("se actualizo el registro")

    Else

    Messagebox.Show("NO se actualizo el registro")

    End If

    si pasa por la no actualizacion quiere decir que el WHERE esta fallando porque no encuantra ninguna registro con el valor de nobmre que proporcionas


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Eduard Sifontes sábado, 27 de octubre de 2012 3:24
    domingo, 21 de octubre de 2012 4:21
  • Es que todos los demas codigos me funcionaron el de INSERTAR, ELIMINAR, BUSCAR, sin el parametro que dices pero este no.
    domingo, 21 de octubre de 2012 4:31
  • has aplciado lo que comento

    - define el WHERE tambien con parametro, no concatenes nada como string

    - valida las filas afectadas que devuelve el ExecutenonQuery


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 21 de octubre de 2012 4:46
  • Lo voy a hacer a ver que tal :)
    domingo, 21 de octubre de 2012 4:52
  • Poniendolo con parametros no me funciono, pero si me funciono el codigo

    me dice NO se actualizo el registro

                Dim afectados As Integer = mycomando.ExecuteNonQuery()
    
                If afectados > 0 Then
    
                    MessageBox.Show("se actualizo el registro")
    
                Else
    
                    MessageBox.Show("NO se actualizo el registro")
    
                End If
    domingo, 21 de octubre de 2012 5:14
  • si esta pasando por el NO entonces quiere decir que el valor que pones en el parametro del WHERE o sea el nombre no encuantra ningun registro que actualizar

    valida que tengas un nombre valido que ingresas en el textbox porque el que escribes no existe como registro en la tabla

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 21 de octubre de 2012 5:22
  • si funciona osea lo que mencionaste:

    Busco el nombre y cuando le doy modificar el textbox1 que es con el cual hice la consulta no modifica, solo lo hace si el nombre es diferente coloco Eduard y cuando modifico y coloco eduard marx no actualiza porque sera???

    domingo, 21 de octubre de 2012 5:30
  • Busco el nombre y cuando le doy modificar el textbox1 que es con el cual hice la consulta no modifica, solo lo hace si el nombre es diferente coloco Eduard y cuando modifico y coloco eduard marx no actualiza porque sera???

    Amigo jamas te va a funcionar porque en tu Clausula WHERE estas preguntando por el "Eduard Marx" que aun no existe en tu Bd y como no existe pues no te actualiza nada.

     Y este problema deriva de que estas usando el mismo TextBox para Buscar y para Actualizar, yo te recomiendo que almacenes temporalmente el valor de la busqueda en una Variable y sea esta la que pongas como parametro en la clausula Where, pero que sea el valor del Textbox1 el que mandes en parametro del UPDATE.

    myconsulta = "UPDATE registro SET nombre = ?nombre ,apellido= ?apellido ,telefono= ?telefono,email=?email,usuario= ?usuario,contraseña=?contraseña WHERE nombre = ?VariableNombre" mycomando = New MySqlCommand(myconsulta, myconexion) mycomando.Parameters.Add("?nombre", MySqlDbType.VarChar, 45).Value = TextBox1.Text

    mycomando.Parameters.Add("?VariableNombre", MySqlDbType.VarChar, 45).Value = NombreDetuVariable


    Captas la idea?


    Saludos desde Monterrey, N.L. México Luis Escobar :D



    domingo, 21 de octubre de 2012 6:04
  • no pues claro que no va a funciona, si cambias el nombre se supone que deberias mantener en una variable el original

    para poder usarlo en el WHERE sino como esperas localizar el registros que estas editando

    es ams me pregunto proque la tabla no tiene un id o codigo para poder aplciar en el WHERE


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 21 de octubre de 2012 6:31