PDA

Visualizza la versione completa : [vb] Problema con Progress Bar


Teddy
28-05-2002, 23:40
Scusate ma è la prima volata che uso una progress bar.
Ho creato una routine che carica una tabella da access su una combobox. Vorrei che la progress visualizzasse lo stato di caricamento.Ma non funziona ... cosa non va?



Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = datComuni.Recordset.BOF
prgLoadData.Max = datComuni.Recordset.RecordCount

Do While Not (datComuni.Recordset.EOF)
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = datComuni.Recordset.AbsolutePosition
datComuni.Recordset.MoveNext
Loop

End Sub

steno12
29-05-2002, 09:44
Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = 0
prgLoadData.Max = IlNumeroDeiRecordTotali
Numero=0
Do While Not (datComuni.Recordset.EOF)
Numero=Numero+1
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = Numero
datComuni.Recordset.MoveNext
Loop

End Sub


Aggiustatelo

link
homepage http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/
forum http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/public/twforum/default.asp

sebamix
29-05-2002, 14:38
Oppure


if prgLoadData.Value<prgLoadData.Max then
prgLoadData.Value=prgLoadData.Value+1
doevents
end if

Così togli la variabile "Numero"
Ricorda che la progressbar va in errore se value erroneamente va più sopra di max.

Boldan
29-05-2002, 16:31
Ci sono degli errori nel tuo listato, ho inserito le correzioni in grassetto:
1) il valore minimo è 0, non puoi assegnargli il valore della proprietà BOF per 2 motivi: è di tipo booleano e indica semplicemente se ti trovi all'inizio del recordset.
2) Inizializzi il valore della ProgressBar a 0
3) per ogni record che leggi incrementi di uno il valore della ProgressBar




Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = 0
prgLoadData.Max = datComuni.Recordset.RecordCount
prgLoadData.Value = 0
Do While Not (datComuni.Recordset.EOF)
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = prgLoadData.value + 1
datComuni.Recordset.MoveNext
Loop

End Sub



Spero sia abbastanza chiaro, fammi sapere...
Ciao!!:ciauz:

darkblOOd
29-05-2002, 16:34
leggi quanto detto da boldan + ....

e il valore max della progress bar deve essere uguale al numero di record che ottieni (RecordCount)

:ciauz:

Teddy
29-05-2002, 21:56
Grazie Boldan! non avevo capito bene come impostare i valori della proprietà min e value.
UNa cosa però ...
Ciò che mi da errore è questo:




prgLoadData.Max = datComuni.Recordset.RecordCount


Se faccio il debug mi segna come valore 1 e poi 501, ma i recordi sono 14654.

Io penso che quando inizio il ciclo, ancora l'oggetto data non sia stato completamente caricato.
Eppure il ciclo parte con la pressione di un tasto.
Nel form load devo mettere qualche istruzione particolare per far caricare l'oggetto data?
Questa è una mia opinione!
Oppure sto andando fuori pista ...?
Grazie!

steno12
29-05-2002, 23:15
Non l'hai provato?

Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = 0
'al posto di IlNumeroDeiRecordTotali scrivi 14654
prgLoadData.Max = IlNumeroDeiRecordTotali
Numero=0
Do While Not (datComuni.Recordset.EOF)
Numero=Numero+1
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = Numero
datComuni.Recordset.MoveNext
Loop

End Sub

se funziona allora fai così:
ricavi prima il numero di record e poi utilizzi la progressbar

okay te l'ho aggiusto:

Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = 0
Numero=0
Do While Not (datComuni.Recordset.EOF)
Numero=Numero+1
Loop
num=0
prgLoadData.Max = Numero
Do While Not (datComuni.Recordset.EOF)
num=num + 1
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = num
datComuni.Recordset.MoveNext
Loop

End Sub






link
homepage http://%77%77%77%2e%74%77%6f%72%6b%2e%69%74/
forum http://%77%77%77%2e%74%77%6f%72%6b%...rum/default.asp

Teddy
30-05-2002, 11:55
'al posto di IlNumeroDeiRecordTotali scrivi 14654
prgLoadData.Max = IlNumeroDeiRecordTotali


Mi sembra un po rozzo scrivere il numero dei record del listato.
C'è una funzione o metodo che conta i record totali di una tabella?

steno12
30-05-2002, 13:31
questo l'hai provato?

Private Sub loadcombo()

prgLoadData.Visible = True
prgLoadData.Min = 0
Numero=0
Do While Not (datComuni.Recordset.EOF)
Numero=Numero+1
Loop
num=0
prgLoadData.Max = Numero
Do While Not (datComuni.Recordset.EOF)
num=num + 1
CmbCitta.AddItem (datComuni.Recordset!comune)
prgLoadData.Value = num
datComuni.Recordset.MoveNext
Loop

End Sub
--------------------

comunque nel db potresti mettere un campo id dove contiene il numero dei record totali, lo leggi e lo assegni a progressbar1.max

l'esempio sopra ti conta tutti i record e poi assegna Numero a progressbar1.max

Teddy
30-05-2002, 20:10
Caro steno,
ho provato il tuo esempio, Grazie! ma la cosa non è fattibile ... non ti dico il tempo che ci vuole per contare tutti i record (visto che sono quasi 15.000)
Dovrò optare per inserire il campo ID nel database ...
Thanks!

Loading