none
Asignar un dato de la base de datos a una variable para mostrarla en un listbox

    Pregunta

  • Buen día.

    Agradecería me apoyaran con lo siguiente:

    Tengo la siguiente parte del programa, todo se realiza adecuadamente y lo único que me falta es poder introducir las celdas que he filtrado de la base de datos en un listbox. Introduje la sintaxis pero siempre me muestra un error en la línea que indico abajo.

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Dim consultar As String
            Dim lista As Byte
            Dim AbclaseERU As String

            If cbclaseERU.Text <> "" Then
                consultar = "SELECT * FROM ERUtotal WHERE ClaseERU = '" & cbclaseERU.Text & "'"
                Adaptador = New OleDbDataAdapter(consultar, Conexion)
                registros = New DataSet
                Adaptador.Fill(registros, "ERUtotal")
                lista = registros.Tables("ERUtotal").Rows.Count

                If lista <> 0 Then
                    AbclaseERU = registros("AbclaseERU")                 <----------    AQUÍ ME MUESTRA UN ERROR
                    lbopcabclaseERU.Items.Add(AbclaseERU)
                                   
                Else
                    MsgBox("NO hay registros con dicho código", vbCritical, "Atención")

                End If

            End If
        End Sub

    martes, 25 de abril de 2017 3:01

Respuestas

  • "Rebeca Menlo" escribió:

    > Escribí el programa que amablemente pusiste para intentar solucionar el problema,
    > sin embargo continuo colocando el mismo mensaje, al revisarlo supuse que el error
    > radicaba en la variable "registros" ya que en el nuevo código no hacia uso de esta
    > y cambie la variable "registros" por "table" y el error se eliminó.
    >
    >   Dim AbclaseERU As String = Convert.ToString(table("AbclaseERU"))   <---- AQUÍ SE DETUVO

    ¡Madre mía! Llevas razón: discúlpame. :-(

    Me equivoqué al "copiar/pegar" y no rectificar la línea de tu código donde supuestamente deseabas obtener el valor del campo "AbclaseERU", sin darme cuenta que la variable registros referencia un objeto DataSet. :-((

    Modifica el bloque If .. Else ... End If que comienza por las siguientes líneas:

        If (lista > 0) Then
            Dim AbclaseERU As String = Convert.ToString(table("AbclaseERU"))   <---- AQUÍ SE DETUVO

    por este otro bloque:

        If (lista > 0) Then
            ' Al menos existe un registro: referenciamos el primer
    ' registro del objeto DataTable. Dim row As DataRow = table.Rows(0) ' Obtenemos el valor de su campo AbclaseERU Dim AbclaseERU As String = Convert.ToString(row("AbclaseERU")) lbopcabclaseERU.Items.Add(AbclaseERU) Else MsgBox("No hay registros con dicho código", vbCritical, "Atención") End If


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    viernes, 28 de abril de 2017 6:09
    Moderador

Todas las respuestas

  • "Rebeca Menlo" escribió:

    >  AbclaseERU = registros("AbclaseERU")    <----------    AQUÍ ME MUESTRA UN ERROR

    Hola, Rebeca:

    ¿Y podemos conocer el mensaje de error exacto que te muestra? Tienes que tener SIEMPRE en cuenta que cuantos más detalles aportes en tu pregunta más fácil será intentar ayudarte.

    Sin más detalles del error que obtienes, lo único que te puedo decir por ahora es que utilices el método compartido ToString de la clase Convert para convertir a String el valor Object que intentas asignarle a la variable alfanumérica llamada AbclaseERU, vaya a ser que el valor del campo de la tabla sea DBNull.Value, por lo que tendrás que hacer una conversión explícita al tipo de dato alfanumérico (String) utilizando una función de conversión que no desencadene una excepción, como bien puede ser el método indicado:

    AbclaseERU = Convert.ToString(registros("AbclaseERU"))

    Intenta modificar tu código para ejecutarlo como indico a continuación:

        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    
            If (cbclaseERU.Text <> "") Then
        
                ' Crear el comando
                Dim comando As OleDbCommand = Conexion.CreateCommand()
    
                ' Indicar la consulta con parámetros que deseamos ejecutar
                comando.CommandText = "SELECT * FROM ERUtotal WHERE ClaseERU = @param1"
    
                ' Añadimos el único comando de entrada existente a la colección
                ' Parameters del comando.
                '
                comando.Parameters.AddWithValue("@param1", cbclaseERU.Text)
    
                ' Creamos el adaptador de datos
                '
                Adaptador = New OleDbDataAdapter(comando)
     
                ' Crear un objeto DataTable
                Dim table As New DataTable("ERUtotal")
    
                ' Rellenar el objeto DataTable
                Adaptador.Fill(table)
    
                Dim lista As Integer = table.Rows.Count
                If (lista > 0) Then
                    ' Referenciamos el primer registro del objeto DataTable  
          Dim row As DataRow = table.Rows(0)

            ' Obtenemos el valor de su campo AbclaseERU
            Dim AbclaseERU As String = Convert.ToString(row("AbclaseERU"))
            lbopcabclaseERU.Items.Add(AbclaseERU)
    Else MsgBox("NO hay registros con dicho código", vbCritical, "Atención") End If End If End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.






    jueves, 27 de abril de 2017 7:21
    Moderador
  • Hola Enrique.

    Primero que todo, de verdad agradezco mucho tu ayuda!

    - El error que me marca en el segmento de programa que subí es el siguiente:

    "BC30367   Class 'DataSet' cannot be indexed because it has no default property."

    Escribí el programa que amablemente pusiste para intentar solucionar el problema, sin embargo continuo colocando el mismo mensaje, al revisarlo supuse que el error radicaba en la variable "registros" ya que en el nuevo código no hacia uso de esta y cambie la variable "registros" por "table" y el error se eliminó.

    Después, cuando corrí el programa, funcionó en general bien hasta que se detuvo en la parte que entra al "If"

      If (lista > 0) Then
                    Dim AbclaseERU As String = Convert.ToString(table("AbclaseERU"))   <---- AQUÍ SE DETUVO
                    lbopcabclaseERU.Items.Add(AbclaseERU)
                                   


    y me mostró el siguiente mensaje:

    "InvalidCastException ocurred

    Exception thrown: 'System.InvalidCastException' in Microsoft.VisualBasic.dll

    Additional information: La conversión de la cadena "ERU" en el tipo 'Integer' no es válida.

    Troubleshooting tips:
    -Make sure the source type is convertible to the destination type
    -When casting from a number, the value must be a number less than infinity
    -Get general help for this exception"

    No sé de donde saca una conversión a tipo entero si no manejo ninguna variable entera en ninguna parte del programa ni de la base de datos.

    Muchas gracias por tu apoyo!

    viernes, 28 de abril de 2017 5:09
  • "Rebeca Menlo" escribió:

    > Escribí el programa que amablemente pusiste para intentar solucionar el problema,
    > sin embargo continuo colocando el mismo mensaje, al revisarlo supuse que el error
    > radicaba en la variable "registros" ya que en el nuevo código no hacia uso de esta
    > y cambie la variable "registros" por "table" y el error se eliminó.
    >
    >   Dim AbclaseERU As String = Convert.ToString(table("AbclaseERU"))   <---- AQUÍ SE DETUVO

    ¡Madre mía! Llevas razón: discúlpame. :-(

    Me equivoqué al "copiar/pegar" y no rectificar la línea de tu código donde supuestamente deseabas obtener el valor del campo "AbclaseERU", sin darme cuenta que la variable registros referencia un objeto DataSet. :-((

    Modifica el bloque If .. Else ... End If que comienza por las siguientes líneas:

        If (lista > 0) Then
            Dim AbclaseERU As String = Convert.ToString(table("AbclaseERU"))   <---- AQUÍ SE DETUVO

    por este otro bloque:

        If (lista > 0) Then
            ' Al menos existe un registro: referenciamos el primer
    ' registro del objeto DataTable. Dim row As DataRow = table.Rows(0) ' Obtenemos el valor de su campo AbclaseERU Dim AbclaseERU As String = Convert.ToString(row("AbclaseERU")) lbopcabclaseERU.Items.Add(AbclaseERU) Else MsgBox("No hay registros con dicho código", vbCritical, "Atención") End If


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    viernes, 28 de abril de 2017 6:09
    Moderador