PDA

View Full Version : <vb6> Listbox con oltre 32k di items


andreadue
29-10-2007, 15:53
Premesso che, come sempre, di VB e pc ne so meno di nulla, presento il mio problema.
Ho un prodottino scritto in VB6 che, tra le altre cose, permette all'utente di selezionare alcuni dati da una listbox caricata leggendo da un db.
Il problema e' che, quando vado a leggere, ottengo un valore negativo (-13457) nella variabile lbxItems.ListCount, in quanto sembra troppo piccola (max 32767) per contenere tutti gli items caricati (ad oggi 52079, ma, in previsione ben oltre i 100.000).

Come posso risolvere? :muro:

Grazie,
Andrea

cionci
29-10-2007, 16:24
Imho è sbagliato l'approccio...visualizzare oltre 32k items è davvero troppo. Secondo me faresti meglio ad impostare una stringa che ti permetta di ricercare all'interno delle items e di visualizzare solo quelle che soddisfano la ricerca.
Mi puoi spiegare cosa come sono fatte queste items e come sono ordinate ?

okay
29-10-2007, 16:35
Premesso che, come sempre, di VB e pc ne so meno di nulla, presento il mio problema.
Ho un prodottino scritto in VB6 che, tra le altre cose, permette all'utente di selezionare alcuni dati da una listbox caricata leggendo da un db.
Il problema e' che, quando vado a leggere, ottengo un valore negativo (-13457) nella variabile lbxItems.ListCount, in quanto sembra troppo piccola (max 32767) per contenere tutti gli items caricati (ad oggi 52079, ma, in previsione ben oltre i 100.000).

Come posso risolvere? :muro:

Grazie,
Andrea

forse il problema non è nel numero di elementi che metti nel listbox, ma nel ciclo che usi per recuperare i dati...

andreadue
30-10-2007, 08:47
Imho è sbagliato l'approccio...visualizzare oltre 32k items è davvero troppo. Secondo me faresti meglio ad impostare una stringa che ti permetta di ricercare all'interno delle items e di visualizzare solo quelle che soddisfano la ricerca.
Mi puoi spiegare cosa come sono fatte queste items e come sono ordinate ?

Grazie per l'interessamento.
Si tratta di una lista di valori per inserire un filtro.
Mi spiego: l'utente ha una serie di dati da consultare in un dwh (circa 100k righe in quella specifica vista) ma puo' filtrare su determinati campi.
La listbox serve per presentare una lista di dati (nel caso specifico il num.fattura) tra i quali l'utente puo' sceglere solo quelli che gli interessano.
Purtroppo l'ordine di grandezza e', oggi, oltre le 80.000 righe l'anno.

Gli items (o come si chiamano in VB non so :confused: ) sono caricati tramite una select distinct... group by campo, order by campo da un db SqlServer 2000.

Quando l'utente usa la funzione di inserimento filtro parte la query su tabella e campo specifico, viene caricata la listbox e presentata all'utente che, ora, seleziona i numeri di protocollo opportuni e chiude la finestra. In questo momento i valori vengono filtrati nella query per il motore OLAP.

Spero di non essere stato troppo fumoso:eek:

andreadue
30-10-2007, 08:53
forse il problema non è nel numero di elementi che metti nel listbox, ma nel ciclo che usi per recuperare i dati...


Dim i As Integer
Dim coll As New Collection

If lst.ListIndex <> -1 Then
For i = 0 To lst.ListCount - 1
If lst.Selected(i) = True Then
coll.Add lst.List(i)
End If
Next
End If

Scusate per come viene scritto, ma non mi prende gli spazi sulla formattazione:muro: