none
No se han especificado valores para algunos de los parámetros requeridos RRS feed

  • Pregunta

  • Hola mi nombre es Oscar y recién estoy iniciando con Visual Basic 2010. He realizado un ejercicio muy simple donde se recoge un valor desde un ComboBox para pasárselo de parámetro a un procedimiento que obtiene de una base de datos access una consulta. Al ejecutar sale la excepción (0x80040E10) No se han especificado valores para algunos de los parámetros requeridos. Siempre en la linea dr = cmd.ExecuteReader(). Envío el código para ver si alguien puede ayudarme. Gracias

    Public Class Form1

        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            conexion()
            llenar_combo()
        End Sub

        Public Sub llenar_combo()
            Me.ComboBox1.Items.Clear()
            Dim sql As String
            sql = "SELECT nombre FROM personas"
            cmd.CommandType = CommandType.Text
            cmd.Connection = conn
            cmd.CommandText = sql
            dr = cmd.ExecuteReader
            If dr.HasRows = True Then
                While dr.Read()
                    Me.ComboBox1.Items.Add(dr.GetValue(0))
                End While
            End If
            dr.Close()
        End Sub

        Private Sub ComboBox1_SelectedValueChanged1(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
            Me.TextBox1.Text = Me.ComboBox1.SelectedItem.ToString
        End Sub
        Public Sub consultar(ByRef identifica As String)

            cmd.Connection = conn
            cmd.CommandType = CommandType.Text

            If identifica <> "" Then
                cmd.CommandText = "SELECT CIP, APELLIDO, DOCUMENTO, NUMERO_DOCUMENTO, NACIONALIDAD FROM PERSONAS WHERE NOMBRE=" & identifica
            Else
                cmd.CommandText = "SELECT CIP, APELLIDO, DOCUMENTO, NUMERO_DOCUMENTO, NACIONALIDAD FROM PERSONAS"
            End If

            Try
                dr = cmd.ExecuteReader()

                If dr.HasRows Then
                    While dr.Read()
                        MsgBox(dr(0).ToString + " " + dr(1).ToString + " " + dr(2).ToString + " " + dr(3).ToString + " " + dr(4).ToString)
                    End While
                Else
                    MsgBox("No existen registros para la consulta")
                End If
                dr.Close()
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim id As String
            id = ComboBox1.Text
            consultar(id)
        End Sub

    End Class   

    viernes, 7 de abril de 2017 19:50

Respuestas

  • Es que aunque el parámetro dentro de la función es string, al enviarse el parámetro a la sentencia SQL no es un string, ya que estas formando la cadena de forma manual.

    Si deseas hacer un parámetro para SQL debes usar:

    cmd.CommandText = "SELECT CIP, APELLIDO, DOCUMENTO, NUMERO_DOCUMENTO, NACIONALIDAD FROM PERSONAS WHERE NOMBRE=@Nombre"
    cmd.Parameters.Clear()
    cmd.Parameters.AddWithValue("@Nombre", Identifica)
    

    En este caso, no necesita las comillas simples.

    Saludos.


    lunes, 10 de abril de 2017 14:21

Todas las respuestas

  • Intenta con:

    cmd.CommandText = "SELECT CIP, APELLIDO, DOCUMENTO, NUMERO_DOCUMENTO, NACIONALIDAD FROM PERSONAS WHERE NOMBRE='" & identifica & "'"

    A ver si funciona, solo agregue ' ' para el campo.

    Saludos


    viernes, 7 de abril de 2017 19:54
  • Muchas gracias por su pronta y amable respuesta. Funcionó perfectamente. Podría explicarme si no es molestia porque requiere la variable estar entre simbolos &  & ya que fue pasada por parámetro como string. Gracias
    viernes, 7 de abril de 2017 20:42
  • Es que aunque el parámetro dentro de la función es string, al enviarse el parámetro a la sentencia SQL no es un string, ya que estas formando la cadena de forma manual.

    Si deseas hacer un parámetro para SQL debes usar:

    cmd.CommandText = "SELECT CIP, APELLIDO, DOCUMENTO, NUMERO_DOCUMENTO, NACIONALIDAD FROM PERSONAS WHERE NOMBRE=@Nombre"
    cmd.Parameters.Clear()
    cmd.Parameters.AddWithValue("@Nombre", Identifica)
    

    En este caso, no necesita las comillas simples.

    Saludos.


    lunes, 10 de abril de 2017 14:21