[ g01d c0d3 @ 24.04.2008. 14:19 ] @
Ovako, imam bazu podataka i u njoj npr. 2 tabele sa po 5000 zapisa.

Code:

Dim cn as new adodb.connection
dim rs as new adodb.recordset
dim rs1 as new adodb.recordset

rs.open "select * from tbl1",cn
rs1.open "select * from tbl2",cn

lbl1.caption = rs.recordcount
lbl2.caption = rs1.recordcount

rs.close
rs1.close


Sada me zanima kako ovde da ukljucim progresbar. Znaci dok obraduje informacije koliko zapisa ima u tabeli 1 i tabeli 2 da to prati progresbarom.
[ Eurora3D Team @ 24.04.2008. 15:10 ] @
Pa nemozes (jedino nesto otpilke)
ova linija
Code:

rs.open "select * from tbl1",cn

blokira izvodjenje programa dok se ne zavrsi ... mozes da stavis u nekom timer eventu da povecava vrednost al neznas koja je max vrednost odnosno koliko ce operacija da traje.
Ako si mislio da da se vrednost povecava dok se iscitavaju redovi u tabeli onda moze nesto ovako
Code:

ProgressBar1.Min = 0
ProgressBar1.Max = rs.recordcount
ProgressBar1.Value = 0
while ... nesto
ProgressBar1.Value = ProgressBar1.Value + 1
citanje tabele
....

Pretrazi forum.
Aleksandar Ruzicic je jednom postavio kod za Infinite progres bar (graficko resenje koje se vrti i ne pokazuje neku konkretnu vrednost). Mislim da je to najbolje za ovakve situacije gde se napredak neke operacije ustvari nezna.
[ stefanpn @ 24.04.2008. 17:22 ] @
Mislim da to ne moze da se izvede ni sa infinite-progressbar-om... jer ce se program "ukociti" sve dok cita iz baze

Jedino da citas jedan po jedan ili recimo 10 po 10 zapisa:

Code:

rs.Open "Select * From Tabela;"
ProgressBar.Max = Int(rs.RecordCount) / 10 + 1
rs.Close
Do While Not rs.EOF
    rs.Open "Select * From Tabela Between ID = " & CStr(a) & " And " & CStr(a+10) & ";"
    a = a + 11
    ProgressBar.Value = ProgressBar.Value + 1
    'Samo ne znam mozes li da obradjujes 10 po 10 zapisa :), ali ce ti raditi ProgressBar
Loop


Podrazumevao sam da u tabeli imas polje ID - AutoNumber
[ goranvuc @ 24.04.2008. 17:47 ] @
Standardno resenje za ove slucajeve gde ne postoji dogadjaj u kom mozes hvatati napredak neke operacije, ili se ne izvrsava petlja, vec samo postoji jedna naredba koja traje x vremena je:
Code:

Screen.MousePointer = vbHourglass
'radis to sto traje x vremena
Screen.MousePointer = vbDefault

sve ostalo samo zbunjuje korisnike
[ Shadowed @ 24.04.2008. 18:07 ] @
Ili uradis stvar u novom thread-u ;]
[ stefanpn @ 24.04.2008. 18:21 ] @
Bre Shadowed, pa nije ovo [not]NET pa da se lako pokrene novi thread...

Sto se tice Goranovog resenja, moze i to da zbuni korisnike pa mislice da se program smrzo t.j. ukocio ako operacija malo duze potraje...
[ goranvuc @ 24.04.2008. 18:38 ] @
Ja sam dao standardno resenje, tj. takvo resenje na koje su korisnici vec navikli, pa ne bi trebali da se zbune.

A za te tvoje ekstremno zbunjene korisnike moze ovo (pretpostavka je da postoji neka labela sa fontom bold, 36 na formi):
Code:

Label1.Caption = "Upravo se desava jedan proces za koji ne znamo koliko ce da traje, sacekajte molim Vas da se zavrsi, a u medjuvremenu mozete popiti kafu, otici na WC i sl."
'radis to sto traje x vremena
Label1.Caption = "Proces je uspesno zavrsen, ukoliko niste poslusali nas predlog i ostali da sacekate zavrsetak, mozete uvek ponovo pokrenuti ovaj proces i obaviti ono sto smo Vam predlozili"

ili nesto sl.
[ Eurora3D Team @ 24.04.2008. 20:25 ] @
Citat:
stefanpn: Bre Shadowed, pa nije ovo [not]NET pa da se lako pokrene novi thread...

Sto se tice Goranovog resenja, moze i to da zbuni korisnike pa mislice da se program smrzo t.j. ukocio ako operacija malo duze potraje...

Pa nije ni tako tesko :)
Evo ovako moze da se napravi Thread u VB6
Subrutina ThreadFunc se izvodi u threadu
Modul
Code:

Public Const CTF_COINIT = &H8
Public Const CTF_INSIST = &H1
Public Const CTF_PROCESS_REF = &H4
Public Const CTF_THREAD_REF = &H2

Declare Function SHCreateThread Lib "shlwapi.dll" (ByVal pfnThreadProc As Long, pData As Any, ByVal dwFlags As Long, ByVal pfnCallback As Long) As Long

Public Sub ThreadFunc() 'Thread Subrutina
Dim i As Integer
For i = 0 To 99
Debug.Print "broj i = " & CStr(i)
Form1.Caption = CStr(i) ' test program je imao formu Form1
Next i
End Sub


Pozivanje (npr. iz Forme)
Code:

Dim hThr As Long
hThr = SHCreateThread(AddressOf ThreadFunc, ByVal 0&, CTF_INSIST, ByVal 0&)