Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en BD

Estas en el tema de Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en BD en el foro de .NET en Foros del Web. Qué tal, estoy programando una aplicación usando WinFroms VS 2013 que se conecta a una BD de Access El problema que tengo es a la ...
  #1 (permalink)  
Antiguo 11/11/2014, 10:07
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en BD

Qué tal, estoy programando una aplicación usando WinFroms VS 2013 que se conecta a una BD de Access

El problema que tengo es a la hora de llenar un combo box a partir de la selección de un Item en otro combo box, abajo el código

Código:
Dim Tabla As String
    Dim Tipo As Object
    Dim cmb As Object
    Dim Donde As String
    Dim Columna As String
    Dim val As Integer
    Dim Id As Object
    Dim Ordenar As String
    Dim conn As New OleDbConnection
    Dim sqlStr As String
Private Sub cmbTipo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbTipo.SelectedIndexChanged
        cmbInsumo.Items.Clear()
        val = 1
        LlamaCmb(val)
    End Sub
    Private Sub cmbInsumo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbInsumo.SelectedIndexChanged
        cmbDesc.Items.Clear()
        val = 0
        LlamaCmb(val)
    End Sub
 Private Sub LlamaCmb(val)
        Tabla = "Insumos"
        If val = 1 Then
            Tipo = cmbTipo.SelectedItem
            cmb = cmbInsumo
            Donde = "Tipo_Insumo"
            Columna = "Insumo), Insumo_Id"
            Ordenar = "Insumo"
        ElseIf val = 0 Then
            Tipo = cmbInsumo.SelectedItem
            cmb = cmbDesc
            Donde = "Insumo"
            Columna = "Descripcion), Insumo_Id "
            Id = "Insumo_Id"
            Ordenar = "Descripcion"
        End If
        CargaCmb(Tabla, Tipo, cmb, Donde, Columna)
        Tabla = ""
        Tipo = ""
        cmb = ""
        Donde = ""
        Columna = ""
    End Sub
    Private Sub CargaCmb(Tabla, Tipo, cmb, Donde, Columna)
        Try
            Dim com As New OleDbCommand
            Dim lee As OleDbDataReader
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\proyecto.satpc240\Documents\DB_RecursosMateriales.accdb"
            conn.Open()
            com = New OleDbCommand
            com.Connection = conn
            sqlStr = "SELECT Distinct(" & Columna & " FROM " & Tabla & " Where " & Donde & " ='" &
                                    Tipo & "' Order By " & Ordenar
            com.CommandType = CommandType.Text
            com.CommandText = sqlStr
            lee = com.ExecuteReader()
            Do While lee.Read()
                cmb.Items.Add(lee(Columna))
                cmb.ValueMember = lee(Id).ToString
            Loop
            conn.Close()
        Catch ex As Exception
            conn.Close()
            MsgBox("Error: " & ex.Message)
        End Try
    End Sub
La excepción solamente despliega como mensaje de error el contenido de la variable Columna : "Insumo), Insumo_Id"

Francamente estoy perdido, ¿Alguien sabe qué podría hacer o leer para saber como darle solución a este problema
  #2 (permalink)  
Antiguo 11/11/2014, 10:17
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

Me olvidaba, debuggeando el código, truena en cuanto va a obtener el campo Insumo_Id

Cita:
Do While lee.Read()
cmb.Items.Add(lee(Columna))
cmb.ValueMember = lee(Id).ToString
Loop
En cuanto llega a
cmb.ValueMember = lee(Id).ToString
ahí es donde me manda el error, probablemente estoy olvidando algo muy obvio, pero aún no logro descifrar qué pueda ser, nuevamente, les agradezco por su atención.
  #3 (permalink)  
Antiguo 11/11/2014, 13:40
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

hola,

Probaste haciendo esto:

cmb.ValueMember = lee(Insumo_Id).ToString
__________________
Alquileres en la costa
Se tu mismo
  #4 (permalink)  
Antiguo 11/11/2014, 15:27
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

Ya quedó, muchas gracias, tu comentario me ayudó a darle solución a mi problema, sabía que era algo muy simple, abajo dejo los cambios que hice
Columna = "Insumo), Insumo_Id"
a
Columna = "Insumo"
y la consulta la modifiqué de esta forma
sqlStr = "SELECT Distinct(" & Columna & " FROM " & Tabla & " Where " & Donde & " ='" &
Tipo & "' Order By " & Ordenar
a
sqlStr = "SELECT Distinct(" & Columna & "), " & Id & " FROM " & Tabla & " Where " & Donde & " ='" &
Tipo & "' Order By " & Ordenar
  #5 (permalink)  
Antiguo 11/11/2014, 15:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 20
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

Aunque preferiría dejar las columnas a usar dentro de la variable columna, no sé por qué me pueda estar marcando el error, dejaré este tema abierto por el resto de este día en caso de que puedas decirme como hacerlo sin que genere error.

Gracias
  #6 (permalink)  
Antiguo 12/11/2014, 10:37
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

Hola que tal, bueno yo en C# lo hago de la siguiente manera:

1.- Creo mis entidades
Código C#:
Ver original
  1. public string Descripcion { get; set; }
  2.         public Int32 Identificador { get; set; }

2.- En una lista, le anexo los valores a las entidades previamente creadas.
Código C#:
Ver original
  1. List<Entidades> lista = new List<Entidades>();
  2.  
  3. lista.Add( funcion(reader) );
  4.  
  5. // Esta función es la mas importante, puesto que asigna los valores a las entidades
  6. private static Entidades funcion(IDataReader reader)
  7. {
  8.     Entidades reg = new Entidades();
  9.  
  10.     reg.Descripcion = reader["Descripcion"].ToString();
  11.     reg.Identificador = Convert.ToInt32(reader["Identificador"].ToString());
  12. }

3.- Anexo al DataSource el valor de retorno de la lista.
Código C#:
Ver original
  1. comboBox.DataSource = lista;

4.- Indico que valores quiero que se muestren en el combo.
Código C#:
Ver original
  1. comboBox.DisplayMember = "Descripcion";
  2.                 comboBox.ValueMember = "Identificador";

Y eso es todo y hasta el momento no tengo ningún problema al llenar los combos.
__________________
Your Code as a Crime Scene...
  #7 (permalink)  
Antiguo 12/11/2014, 11:28
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 1 mes
Puntos: 5
Respuesta: Problema al llenar ComboBox, mensaje sólo muestra nombres de columnas en B

Mira, si haces esto:

Cita:
qlStr = "SELECT Distinct(" & Columna & ") FROM " & Tabla & " Where " & Donde & " ='" &
Tipo & "' Order By " & Ordenar
tene en cuenta que tanto insumos como id van a ser distinct. si solamente necesitas que insumos sea distinct, probaste hacer esto:

Cita:
Columna = "Insumo), id"

sqlStr = "SELECT Distinct(" & Columna & " FROM " & Tabla & " Where " & Donde & " ='" &
Tipo & "' Order By " & Ordenar
sino la otra solucion es hacer un arraylist (o array)

arraylist columna = new arraylist()
columna.add("insumo");
columna.add("id");

qlStr = "SELECT Distinct(" & Columna(0) & "), Columna(1) FROM " & Tabla & " Where " & Donde & " ='" &
Tipo & "' Order By " & Ordenar
__________________
Alquileres en la costa
Se tu mismo

Etiquetas: windowsform
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:13.