none
mi boton de actualizar modifica todos mis registros RRS feed

  • Pregunta

  • hola tengo un problema mi botón de modificar modifica todos mis registro almacenados en una base de datos

    me podrían dar una manito

    acá les va el código

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            cmd = New OleDbCommand(sql, con)
            Dim adp As New OleDbDataAdapter(cmd)
            Dim dt As New DataTable
            adp.Fill(dt)

            Dim condicion As Boolean = dgregistros.SelectedCells.Item(0).Value <> 0 And correoelec.Text <> "" And nombrecorreo.Text <> ""
            If condicion Then
                Try
                    sql = ""
                    sql = "UPDATE correo SET  correoelec = '" & correoelec.Text & "',nombre = '" & nombrecorreo.Text & " WHERE Id=" & dgregistros.SelectedCells.Item(0).Value & "'  "
                    cmd = New OleDbCommand(sql, con)
                    cmd.CommandText = sql
                    If cmd.ExecuteNonQuery Then
                        MessageBox.Show("Modificado Correcto", "Registro Informa", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        MostrarRegistros()
                    Else
                        MessageBox.Show("Registro no correcto", "Registro Informa", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    End If
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try

            End If
        End Sub

    jueves, 31 de octubre de 2019 13:48

Todas las respuestas

  • Me temo que tienes una comilla fuera de lugar. Fíjate que la abres al principio del nombre y la cierras después del where, con lo que todo el where queda encerrado entre coillas y se cree que "eso" es el nombre que quieres guardar. Y como entonces la sentencia no tiene un "where" de verdad, aplica el cambio a todos los registros.

    Creo que se resolvería con solo cambiar de sitio la comilla:

     sql = "UPDATE correo SET  correoelec = '" & correoelec.Text & "', nombre = '" & nombrecorreo.Text & "' WHERE Id=" & dgregistros.SelectedCells.Item(0).Value

    OJO, cabe hacer la misma observacion que siempre hacemos en los foros cada vez que alguien muestra un codigo como ese: Por razones de seguridad y de eficiencia, no se deben concatenar valores en una sentencia SQL, sino que se debe parametrizar. Si hubieras escrito la sentencia parametrizada, no habrias tenido este problema porque al parametrizarla no hay que poner las comillas. De esta manera, no solo se soluciona la seguridad y la eficiencia, sino que ademas se evitan los errores de comillas y de formato de tipos de dato, y queda el codigo mas legible.

    • Propuesto como respuesta Pablo Rubio jueves, 31 de octubre de 2019 17:55
    jueves, 31 de octubre de 2019 17:35