LISTBOX de 5 Columnas, llenarlas con datos de Base de Dato Access

Tengo un listbox el cual quiero llenar 5 columnas con datos de una base de datos (BDTraiding) en access tabla=PRODUCTOS, y las columnas de datos son ITEM, MARCA, CARACTERISTICAS, ORIGEN y COSTO.

Con este código me agrega en la 1era columna, los datos ITEM

Tbl. MoveFirst
Do Until tbl.EOF

lstproductos.AddItem tbl.Fields(0) 'PRIMERA COLUMNA

'***********                  'DEMAS COLUMNAS

tbl.MoveNext
 Loop

El problema viene cuando trato de ubicar el código para copiar los demas .Fields() en las demás columnas, ya que pensé que utilizando el mismo de VBA pero no funciona, haciendo un bucle, algo como:

lstproductos.list(1,1)= tlb.fields(1)

pero me arroja este error

En lo que puedan ayudarme se los sabre agradecer, estoy estancado en esta operación y no puedo seguir con el proyecto.

1 Respuesta

Respuesta
1

Y digo yo, ¿no te es más sencillo asignarle la SQL directamente como origen de tu cuadro de lista?

Listbox.Rowsource="SELECT Campo1, Campo2,...Campo5 FROM TuTabla..."

Gracias Sveinbjorn por la pronta respuesta.

Para contestar tu pregunta es sencilla, soy fanatico de la programación mas nunca lo estudie, y lo poco que puedo tener de conocimiento lo he adquirido humildemente dándole al teclado.

Y con este proyectico que estoy realizando para mi empresa me parecio mas sencillo la conexión de datos ADO.

Con respecto al código que me envias podrias especificármelo mejor, ya que trate de colocarlo, pero al colocarlo (que asumo es asi)

ListBox1.RowSource = " SELECT tbl.fields(0),tbl.fields(1) from PRODUCTOS"

no me reconoce los FIELDS y me arroja el error '424'... SE REQUIERE UN OBJETO

En vez de hacer todo lo de la conexión ADO, pon simplemente la misma sql que estás usando para cargar los datos en la tabla, pero directamente en el RowSource del cuadro de lista.

Tu haces:

tbl.Open "SELECT * FROM Productos Where ITEM"...

Si es de la tabla Productos de donde quieres coger los 5 campos, simplemente pon:

Listbox.Rowsource="SELECT Campo1, Campo2,...Campo5 FROM Productos"

Donde Campo1, Campo2... serán los nombres de los 5 campos que quieres mostrar (por ejemplo: SELECT ID, Nombre, Precio, Cantidad, Descuento FROM Productos)

Gracias Sveinbjorn por la pronta respuesta pero te comento lo siguiente

lo coloque exactamente como me comentas y me arroja este error 424: SE REQUIERE UN OBJETO

asumi que era porque el ListBox tenia que ser el nombre con que lo tengo en mi FORM, pero luego de colocarlo me arrojo este error

ya el .RowSource no es función de ListBox.

Veo que me insistes con el SQL, mi pregunta seria: no tendría que modificar el código, la conexión, o quizás todo la forma en que estoy programando para que me ejecute esta función en especifico?

Agradecido nuevamente

Si la tabla la tienes en la misma base de datos access que tu formulario (algo que no me quedó claro) no te hace falta hacer ninguna conexión ADO no DAO ni nada por el estilo, simplemente le pones como "origen de la fila" (RowSource) la SQL que te coge los campos que quieres, o, directamente el nombre de la tabla.

El "tipo de origen de la fila" lo tienes que tener en "Tabla/Consulta".

Si la aplicación la estás haciendo en Visual Basic, enlazándola con Access, prueba a cargarlos así:

Tbl. MoveFirst
Do Until tbl.EOF

Lstproductos. AddItem tbl. Fields(0) 'PRIMERA COLUMNA

Lstproductos. AddItem tbl. Fields(1) 'Segunda columna

Lstproductos. AddItem tbl. Fields(2) 'Tercera columna

...

Tbl. MoveNext
 Loop

El cuadro de lista lo tienes que tener configurado para 5 columnas

Gracias Sveinbjorn, intente nuevamente con ese código más me siguió dando el mismo error, investigando lo pude lograr pero cambiando el listbox por un listview y colocando el siguiente código:

CN.Open "Provider=Microsoft.ace.oledb.12.0; data source=" & App.Path & "\BDTraiding.accdb" & ";Persist security info=false"

Dim tbl As New ADODB.Recordset

tbl.CursorLocation = adUseClient
tbl.CursorType = adOpenDynamic
tbl.LockType = adLockBatchOptimistic

tbl.Open "Select * from PRODUCTOS where ITEM", CN, adOpenDynamic, adLockBatchOptimistic


'''''''''''''''''''''''''''''''''''

tbl.MoveFirst
Do Until tbl.EOF

Dim li As ListItem

With ListView1

    Set li = .ListItems.Add(, , tbl.Fields(0))
    li.SubItems(1) = tbl.Fields(1)
    li.SubItems(2) = tbl.Fields(2)
    li.SubItems(3) = tbl.Fields(19)
    li.SubItems(4) = tbl.Fields(5)
End With

tbl.MoveNext
Loop

Agradecido igualmente por el apoyo

Saludos

Me alegra saber que lograste solucionarlo, y de paso, aprendí yo algo nuevo, je je.

ja ja ja, para eso este... ensayo error y aprendizaje...

Por cierto a ver si tienen la respuesta a la mano... estoy intentando llenar unas celdas de un archivo de excel ya prediseñado, pero no poseeo la referencia para hacer el llamado, aparentemente no se instalo con el office, habrá algún lugar donde pueda descargarlo y como hacerlo, ayer estuve hasta tarde en la noche y no pude lograrlo. Agradecido

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas