WebListbox - Database

Buongiorno a tutti,

esiste un modo per caricare molti record in un weblistbox in un tempo accettabile?
Mi spiego meglio dopo una select con una join mi ritrovo circa 2.500 record, devo visualizzare in una listbox 8/9 campi, il tempo di oltre 10secondi.
Il problema non la join in quanto sul db impiega 0.01 secondi ma la addrow sulla weblistbox
Io la imposto in questo modo :

SELECT
theSQL=“SELECT Rag_Soc,zona,Conta_da,ChkList,Doc_inviato,Doc_ritornato,Prev_inviato,Contr_firmato,Cod_MD,Note FROM AF_Ana_Azi left JOIN AF_Gdpr ON AF_Ana_Azi.Cod_MD=AF_Gdpr.Codice_MD order by Rag_soc”

rs=db.sQLSelect(theSQL)

WEBLISTBOX
ListBox1.HasHeading=True
ListBox1.heading(0)=“Ragione sociale”
ListBox1.heading(1)=“Zona”
ListBox1.heading(2)=“Contattato da”
ListBox1.heading(3)=“Incontro per”+EndOfLine+“check List”
ListBox1.heading(4)=“Questionario”+EndOfLine+“inviato”
ListBox1.heading(5)=“Questionario”+EndOfLine+“ricevuto”
ListBox1.heading(6)=“Preventivo”+EndOfLine+“inviato”
ListBox1.heading(7)=“Preventivo”+EndOfLine+“ricevuto”
ListBox1.heading(8)=""

//LISTBOX
listBox1.deleteAllRows
listBox1.columncount=rs.FieldCount

–DIREI CHE DA QUI SI RALLENTA
While Not rs.eOF
v=rs.idxField(1).stringValue
listBox1.addrow v
For i=2 To rs.fieldCount
listBox1.cell(listBox1.lastIndex, i-1)=rs.idxField(i).stringValue
Next
rs.movenext
Wend

Potrei anche usare un limit 1000 ma poi come faccio a sapere quando scorro se se supero il limit?

Spero di essermi spiegato.

Sempre grazie a tutti
Enrico

Trasferire in un solo blocco una mole di dati di questo tipo decisamente sconsigliabile.
Su web trasferisci dati e istruzioni su come visualizzarle e questo comporta tempi notevoli sia per il trasferimento che per l’elaborazione.

Hai diverse soluzioni possibili:
Paginare i dati (per cui richiami piccoli gruppi di dati compatibili con il trasferimento) … se lo fa Google quando fai una ricerca ci sar un motivo!

Inviare i dati a blocchi (in pratica una paginazione senza costringere l’utente a richiedere i nuovi dati, ma devi gestire dopo l’annullamento delle richiesta perch l’utente va in una altra pagina o comunque non ha a disposizione il controllo)

Non usare la webList ma un controllo fatto con l’SDK in cui via javascript replichi le strutture per la visualizzazione (in questo modo devi solo trasmettere i dati strutturati la visualizzazione la fai sul client)

In generale mostrare 2500 record non mai, neanche sul desktop, una buona idea

Per SQL nella query puoi usare Limit e offset

Esempio :
Select colonna1, colonna2, colonna3 from tabella1 where colonna1 Luke ‘C%’ Limit 10 offset 10

Se i record sono 200 carica i record Dan numero 11 al 20

Funziona su SQLite, MySQL, postgre

Mi accodo ai suggerimenti forniti, ovvero valutare un sistema di paginazione, utilizzando Limit e offset.
In alternativa, prima di affrontare la paginazione, potresti fare un test valorizzando la riga non una cella alla volta, ma tutta la riga in un colpo solo, ovvero:

dim cells() as String
For i=1 To rs.fieldCount
  cells.Append(rs.idxField(i).stringValue)
Next
listBox1.addrow(cells)

Grazie a tutti, si in effetti concordo, ho utilizzato un limit sulle select, in modo da visualizzare 700/800 record per volta e ora funziona tutto molto bene.
Mi riservo di studiare un po la soluzione di Antonio che mi pare decisamente ottima per il futuro.

Con l’occasione vorrei ringraziarvi per il supporto che date al forum, per me ma credo per tutti un aiuto FONDAMENTALE!

GRAZIE SEMPRE
Enrico