Ayuda posible con ListBox?

02/12/2003 - 23:12 por msnews.microsoft.com | Informe spam
Hola amigos tengo un problema pero quizas no haya mas solucion:

1.- 1 LISTBOX
2.- Agrego articulos con consulta SQL, (desde base de datos de mdb)
3.- Cantidad de articulos: 3500

Historia breve:
Originalmente hacia el ADDITEM en una COMBOBOX lo cual tardaba
aproximandamente (en agregar los 3mil articulos) 3 segundos, en red,
localmente era 1 segundo.
Ahora es necesario que haga el ADDITEM en una LISTBOX.

Problema:
TIEMPO que tarda en agregar el ADDITEM los 3mil articulos a la LISTBOX mas o
menos 10 segundos en red, con pentium 3 10/100.

Alguna idea para agilizar esto??
podria ser esto?:
1.- que hay una menera de hacer mas rapido el ADDITEM a una listobox.
2.- o cambiar y usar COMBOBOX y que haya una manera de mostrar desplegada la
combobox por default (el usuario no usa mouse), podria ser algo relacionado
con DROP, se podra?

este es el codigo:

ListBox1.ColumnCount = 3
With RecrdSet
While Not .EOF
ListBox1.AddItem
ListBox1.List(cont, 0) = RecrdSet!DESCRIPCION
ListBox1.List(cont, 1) = RecrdSet!EXISTENCIA
ListBox1.List(cont, 2) = Format(RecrdSet!PVENT, "CURRENCY")
cont = cont + 1
.MoveNext
Wend
End With
ListBox1.TextColumn = 1


Saludos a todos y gracias por su cooperacion
PD se aceptan sugerencias de todas!

_____________________________
Rodrigo
_____________________________

Preguntas similare

Leer las respuestas

#1 Luis Garcia
03/12/2003 - 09:36 | Informe spam
"msnews.microsoft.com" escribió en...
Mostrar la cita
o
Mostrar la cita
Prueba antes de cargar los datos de poner Visible = False del listbox,
y cuando finalizes, volver a ponerlo a True. En VB funciona.

Saludines
#2 msnews.microsoft.com
05/12/2003 - 01:05 | Informe spam
Pues no, funciona igual no hay cambio en la rapidez, alguna otra idea?


_____________________________
Rodrigo
_____________________________

"Luis Garcia" escribió en el mensaje
news:uqhJ$
Mostrar la cita
mas
Mostrar la cita
#3 Héctor Miguel
06/12/2003 - 02:13 | Informe spam
hola, Rodrigo !

mensaje 1
Mostrar la cita
mensaje 2
Mostrar la cita
mensaje 3
Mostrar la cita
existe una manera 'express' de cargar datos a listboxes usando variables de matriz
aunque el procedimiento ['engañosamente'] pareciera NO 'tener' NADA de 'express' :))
1.- 'asignar' a una variable de matriz ['tipo' Variant] los valores de un rango de celdas
2.- 'cargar' la listbox usando la propiedad 'List' y 'llenandola' CON la variable de matriz
- esto REQUIRE 'bajar' -primero- a un rango la consulta antes de llenar la listbox
- usando la propiedad CopyFromRecordSet de un objeto 'Range' => XL2000 o 'superior' < - una vez EN la listbox, el rango se puede borrar [inclusive puede 'estar' en una hoja 'oculta']
- lo que 'da la apariencia' de TRIPLE labor: 'escribir' en el rango + 'escribir' en la listbox + borrar :((
- todo el proceso [consulta, rango, lista, presentar el formulario, etc.] en las pruebas que efectue...
- le tomo ... 1 segundo con 4,000 registros y 3 campos [columnas] =>P-3 @800 10/100< - obviamente la red NO 'internivo' y la consulta fue a un archivo de texto con formato csv :))
3.- de hecho, use una hoja oculta [que se llama 'Oculta'] y le 'puse' los tiempos a la hoja 'activa'
4.- sera mejor 'recortar' la consulta a SOLO los campos 'necesarios' :))
5.- las 'adaptaciones' para tu codigo serian +/- las siguientes:
a) incluir una variable [p.e. Dim Listado] =>una variable declarada SIN tipo es por omision del tipo Variant< b) usar una hoja oculta, cuyo 'unico' fin es 'contener' [temporalmente] el 'RecordSet' para la variable y la listbox
c) 'sustituir' el llenado de la listbox usando 'AddItem' y el 'MoveNext', etc. por...
[... ...]
With Worksheets("Tu Hoja Oculta")
.Range("a1").CopyFromRecordset RecrdSet
With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
Listado = .Value
.ClearContents
End With
End With
ListBox1.ColumnCount = RecrdSet.Fields.Count
ListBox1.List = Listado
[... ...]

saludos,
hector.
_______ el codigo 'probado' _______
Sub ConsultaEnArchivoDeTexto()
Range("a1") = Now
Dim Conexion As ADODB.Connection, Registros As ADODB.Recordset, _
Directorio As String, Archivo As String, Consulta As String, Listado As Variant
Directorio = "C:\Mis documentos"
Archivo = "ConsultaSQL.csv"
Consulta = "SELECT * FROM " & Archivo
Set Conexion = New ADODB.Connection
Conexion.Open _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & Directorio & ";Extensions=asc,csv,tab,txt;"
Set Registros = New ADODB.Recordset
Registros.Open Consulta, Conexion, adOpenForwardOnly, adLockReadOnly, adCmdText
With Worksheets("Oculta")
.Range("a1").CopyFromRecordset Registros
With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
Listado = .Value
.ClearContents
End With
End With
With UserForm1
.ListBox1.ColumnCount = Registros.Fields.Count
.ListBox1.List = Listado
.Show vbModeless
End With
Registros.Close: Set Registros = Nothing
Conexion.Close: Set Conexion = Nothing
Range("a2") = Now
End Sub
#4 msnews.microsoft.com
08/12/2003 - 17:54 | Informe spam
Ok Hector haber voy a estudiarlo y a tratar de implementarlo, te comento mas
al rato, gracias.


_____________________________
Rodrigo
_____________________________

"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
a la LISTBOX
Mostrar la cita
de matriz
Mostrar la cita
'express' :))
Mostrar la cita
rango de celdas
Mostrar la cita
variable de matriz
Mostrar la cita
llenar la listbox
Mostrar la cita
XL2000 o 'superior' <> - una vez EN la listbox, el rango se puede borrar [inclusive puede
'estar' en una hoja 'oculta']
Mostrar la cita
+ 'escribir' en la listbox + borrar :((
Mostrar la cita
etc.] en las pruebas que efectue...
Mostrar la cita
=>P-3 @800 10/100<> - obviamente la red NO 'internivo' y la consulta fue a un archivo de
texto con formato csv :))
Mostrar la cita
tiempos a la hoja 'activa'
Mostrar la cita
:))
Mostrar la cita
SIN tipo es por omision del tipo Variant<> b) usar una hoja oculta, cuyo 'unico' fin es 'contener'
[temporalmente] el 'RecordSet' para la variable y la listbox
Mostrar la cita
'MoveNext', etc. por...
Mostrar la cita
Listado As Variant
Mostrar la cita
adCmdText
Mostrar la cita
#5 msnews.microsoft.com
08/12/2003 - 20:38 | Informe spam
Perfecto mi buen Hector estas lineas de abajo son muy interesantes, es la
clave, haces un matriz de todo el contenido de las celdas que tienen valor,
hacia la derecha y hacia abajo. Enseguida metes la matriz a la variable
listado, luego calculas las columnas para la listbox, en base a los campos
del recordset, y enseguida vacias listado en listbox, pero lo que no imagine
es que se pudiera hacer >Range(.Range("a1"),
.Range("a1").End(xlToRight).End(xlDown)), y meternlo a una variable como
matriz, y funciona excelente y muy rapido, creo que esto es finalmente la
solucion, te lo agrdezco mucho saludos!!!!!!!!!!!!!

With Range(.Range("a1"), .Range("a1").End(xlToRight).End(xlDown))
Mostrar la cita
_____________________________
Rodrigo
_____________________________

"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
a la LISTBOX
Mostrar la cita
de matriz
Mostrar la cita
'express' :))
Mostrar la cita
rango de celdas
Mostrar la cita
variable de matriz
Mostrar la cita
llenar la listbox
Mostrar la cita
XL2000 o 'superior' <> - una vez EN la listbox, el rango se puede borrar [inclusive puede
'estar' en una hoja 'oculta']
Mostrar la cita
+ 'escribir' en la listbox + borrar :((
Mostrar la cita
etc.] en las pruebas que efectue...
Mostrar la cita
=>P-3 @800 10/100<> - obviamente la red NO 'internivo' y la consulta fue a un archivo de
texto con formato csv :))
Mostrar la cita
tiempos a la hoja 'activa'
Mostrar la cita
:))
Mostrar la cita
SIN tipo es por omision del tipo Variant<> b) usar una hoja oculta, cuyo 'unico' fin es 'contener'
[temporalmente] el 'RecordSet' para la variable y la listbox
Mostrar la cita
'MoveNext', etc. por...
Mostrar la cita
Listado As Variant
Mostrar la cita
adCmdText
Mostrar la cita
Ads by Google
Search Busqueda sugerida