Sezioni principali
Forum
Offerte lavoro
Corsi
Articoli
Toggle sign-in
Toggle search
Forum
Pubblica Annunci Lavoro ICT
Iscrizione Candidati
Login
Cerca In
Offerte lavoro
Forum
Corsi formazione
Articoli
Home
Offerte di lavoro ICT
Area Candidati
Offerte di lavoro
Iscrizione Candidati
Area Aziende
Iscrizione Aziende
Aziende iscritte
Forum sviluppatori
Generale
Indice Forum
Cerca nel Forum
Messaggi recenti
Registrazione
Area Software
Ingegneria del software
Assembly
C/C++
Delphi
Java
Matlab e Simulink
Microsoft .NET
Python
Area Web
HTML e CSS
JavaScript
Angular
ASP.NET
PHP
Webmaster
Mobile
Android
Apple iOS e Objective-C
Windows Phone
Database
Progettazione Database
Microsoft Access
MySQL e MariaDB
Oracle
PostgreSQL
SQL Server
Excel
Hardware & OS
Microsoft Windows
Linux
Hardware e Reti
Sistemi Embedded e Microcontroller
Corsi di informatica
Eventi ICT
Articoli
Consulenza
Sviluppo software e Consulenza informatica
Utility
Il tuo Indirizzo IP
Home
Forum
Altri linguaggi di programmazione
Visual Basic 6.0
Nuovi posts
Cerca
Iscriviti
Ordinamento veloce elementi listbox VB6
di
Gianni24
il
06 ott 2017, 02:10
Condividi
Cerca
Ricerca avanzata
21 risposte
1
2
»
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Ordinamento veloce elementi listbox VB6
06 ott 2017, 02:44
Ciao a tutti,
ho una listbox dove carico ed ordino dei numeri in senso crescente.
Finché questi sono pochi (circa una cinquantina) l'ordinamento è veloce ma quanto il numero di elementi all'interno della list box diventa elevato (400-500 e oltre) l'ordinamento diventa lento impiegando svariati secondi. Potete darmi una mano a risolvere il problema, grazie.
Ecco il codice che ho utilizzato:
Public Sub Ordinacrescente()
Dim I As Integer
Dim J As Integer
Dim iCount As Integer
Dim Temp As Integer
iCount = schermata_volumi.lst_Numeri.ListCount
For J = 0 To iCount - 2
For I = 0 To iCount - 2
With schermata_volumi.lst_Numeri
If Val(.List(I)) > Val(.List(I + 1)) Then
Temp = .List(I + 1)
.List(I + 1) = .List(I)
.List(I) = Temp
End If
End With
Next I
Next J
End Sub
21 Risposte
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 08:32
Se i dati arrivano da un DB ordinali con SQL.
Altrimenti caricali in un vettore e ordinali prima di caricarli nella listbox. Se lo fai direttamente nella listbox sarà comunque lento.
Per ordinare i dati nel vettore usa l'algoritmo quicksort.
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 10:16
Ciao oregon, i dati vengono da un file mdb di access.
Sto provando a risolvere il problema ma non ci riesco, sono poco pratico. Potresti aiutarmi?
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 10:19
Puoi aiutarmi?
Ogni volta che ti rispondo ti aiuto. O no?
Se i dati arrivano da Access probabilmente li prendi tramite una query. Se è così usa la clausola ORDER BY
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 10:43
Hai ragione..., è da sempre che mi aiuti... purtroppo non sono ancora abbastanza bravo nella programmazione...
nella listbox carico i dati in questo modo:
Public Function carica_volumi() 'CARICO LA LISTA CON GLI ID DEL DATABASE
If rs.RecordCount = 0 Then
schermata_volumi.lst_Volumi.Clear
errormsg = MsgBox("Nessun documento caricato", vbCritical, "Attenzione!")
Exit Function
End If
rs.MoveLast
rs.MoveFirst
max = rs.RecordCount
rs.MoveFirst
schermata_volumi.lst_Volumi.Clear
For I = 1 To max
schermata_volumi.lst_Volumi.AddItem rs("id")
rs.MoveNext
Next I
End Function
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 10:53
Manca la parte di codice con cui ottieni il recordset rs
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:06
Option Explicit
Public DB As Database
Public rstInfo As Recordset
Public rs As Recordset
Public max As Long
Public I As Long
Public errormsg
Public dbadd As Boolean
Public dbedit As Boolean
Dim Stringa As String
Public Function ApriDB() 'LEGGO IL DATABASE
Set DB = OpenDatabase(App.Path & "\libri.mdb", False, False, "; pwd=gianni24")
Set rs = DB.OpenRecordset("Info", dbOpenTable)
End Function
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:10
Non devi ottenere la tabella (con dbOpenTable) ma devi usare una SELECT
OpenRecordset("SELECT * FROM Info ORDER BY Dato")
mettendo al posto di Dato il nome del campo numerico con cui vuoi ordinare.
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:29
Si così va, soltanto che numera in ordine 1, 10, 100 invece di 1, 2 , 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:35
Ma il campo che contiene il dato nel tuo db è numerico o testo?
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:42
TESTO
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:48
Sbagliato. Se sono numeri deve essere numerico.
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 11:54
Hai perfettamente ragione, ma quando selezione il numero id dalla listbox se è numerico mi da errore:
Public Function seleziona_documento() 'DALLA LISTA CARICO I DATI NELLE TEXTBOX
Set rs = DB.OpenRecordset("Select * from Info where id = '" & Trim(schermata_volumi.lst_Volumi.List(schermata_volumi.lst_Volumi.ListIndex)) & "'")
rs.MoveFirst
schermata_volumi.txt_id = rs("id")
schermata_volumi.txt_autore = rs("autore")
schermata_volumi.txt_titoloedizione = rs("titoloedizione")
schermata_volumi.txt_testo = rs("testo")
End Function
O
oregon
Super Famoso
Iscritto da
nov, 2011
Messaggi:
21595
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 12:47
Di quale errore parli? Questo che c'entra con quello che hai chiesto fino ad ora?
Ripeto ... il campo deve essere numerico.
G
Gianni24
Utente Attivo
Iscritto da
ott, 2014
Messaggi:
66
Re: Ordinamento veloce elementi listbox VB6
06 ott 2017, 13:37
Oregon è vero quello che dici, ma cliccando sui numeri dentro la listbox (inserito come campo numerico anzicché testo) mi da errore nel caricare gli altri campi del database nei textbox.
Devi
accedere
o
registrarti
per scrivere nel forum
21 risposte
1
2
»
Condividi