Una famiglia di sistemi di gestione per database relazionali di Microsoft progettati per semplificare l'uso.
Ciao Giorgio,
no, non è una questione di grafica; anzi, mentre quella più veloce è rappresentata da una maschera con in mezzo un'etichetta in cui si forma man mano una barra fino alla fine dell'etichetta, quest'altra più lenta si presenta nella barra di stato. E' uguale a quella che esce automaticamente quando si tenta di aprire una query con parecchi dati.
Siccome la progress bar la uso sempre nel momento in cui un determinato sviluppo di dati (certamente più complesso di quello dell'esempio) supera un certo periodo di tempo, mi farebbe piacere sapere come ridurre man mano i 190000 records a 500.
Grazie Vladimiro.
Ciao Vladimiro,
vabbè tu dici che non è una questione di complessità grafica ma il punto non è questo.
Una qualsiasi funzione richiede un determinato tempo di esecuzione, poniamo il caso che la funzione della barra di scorrimento richieda il tempo di 1 millisecondo, con 190.000 record si spendono 190 secondi (3 minuti circa) con 1.000.000 di record si spendono 1.000 secondi (circa 16 minuti).
E' evidente che il problema non è il tempo richiesto dalla funzione, ma il modo in cui la usi.
Potresti richiamare solo 100 volte la funzione spendendo 100 millisecondi (1 decimo di secondo) e ottenere lo stesso effetto.
Guarda questo semlice esempio tratto dal tuo codice a cui ho apportato poche modifiche.
Dim Rs As DAO.Recordset
Dim i As Long
Dim Step As Long
Set Rs = CurrentDb.OpenRecordset("Tabella1")
Rs.MoveLast
Rs.MoveFirst
SysCmd acSysCmdInitMeter, "Elaborazione: ", Rs.RecordCount
'Richiamo la SysCmd 100 volte
Step = Rs.RecordCount / 100
i = 1
Do Until Rs.EOF
Rs.Edit
Rs!Progressivo = i
Rs.Update
If i Mod Step = 0 Then
SysCmd acSysCmdUpdateMeter, i
End If
Rs.MoveNext
i = i + 1
Loop
Rs.Close
Set Rs = Nothing
SysCmd acSysCmdClearStatus
Ciao
Giorgio Rancati