[ zormar @ 05.02.2007. 14:48 ] @
Imam bazu sa vise hiljada zapisa.
Da li je moguce istovremeno prikazati i napredovanje na ProgressBaru i ucitavanje podataka u labele na obrascu tj. da se vidi kako se labele popunjavaju podacima.
Moze li ovo da se resi pomocu PictureBoxa?
[ goranvuc @ 05.02.2007. 20:48 ] @
Mozes li precizirati sta podrazumevas pod ucitavanjem podataka u labele na obrascu, tj. da li ovde mislis na formu ili na neki stampani izvestaj. Raspolozen sam da ti postavim ovde opsti primer rada u nekom procesu koji treba da daje informaciju o napredovanju korisniku, ali ne bi bilo lose da ti prvo postavis problem, tj. dokle si stigao - pa da zavrsimo.
[ zormar @ 05.02.2007. 21:24 ] @
Radi se o formi.
Problem je u tome sto kad povezem PB s tom formom, prvo PB dodje do kraja pa tek posle 10 sec se labele na toj formi popune podacima.
Podaci kojima se popunjavaju labele su rezultat upita.
Za jedno komandno dugme sam vezao i prikazivanje te forme sa labelama i izvrsavanje upita, naravno i PB.
Pokusao sam i sa PictureBoxom ali je opet isto.
[ goranvuc @ 05.02.2007. 21:53 ] @
Da bi sve ispravno funkcionisalo moras koristiti Do Events u petlji u kojoj punis labele i povecavas progres, npr.
Code:

Do While Not rstData.EOF
    
    Do Events

    'Povecavas vrednost progres bara
    'Punis labelu sa tekstom
    
    rstData.MoveNext

Loop
[ zormar @ 06.02.2007. 20:13 ] @
Sta ovde nije u redu?
S ovim kodom PB startuje tek posto se prikaze Form5 sa ucitanim podacima(popunjene labele).
Gde sam pogresio?

Code:
Private Sub cmdUk_Click()
Do While Not Form2.Adodc2.Recordset.EOF
Timer1.Interval = 1
Timer1.Enabled = True
ProgressBar1.Enabled = True
ProgressBar1.Visible = True
ProgressBar1.Min = 1
ProgressBar1.Max = MSHFlexGrid1.Rows - 1
ProgressBar1.Value = ProgressBar1.Value + 1

UkBroj1 ' f-je koje pune labele
UkBroj2
UkBroj3
UkBroj4
UkBroj5
UkBroj6
UkBroj7
UkBroj8
UkBroj9
UkBroj10

DoEvents
 Form2.Adodc2.Recordset.MoveNext
 Form5.Show
loop
end sub

Private Sub Timer1_Timer()
If ProgressBar1.Value = MSHFlexGrid1.Rows - 1 Then
   Timer1.Enabled = False
   ProgressBar1.Visible = False
End If
End Sub



[Ovu poruku je menjao zormar dana 06.02.2007. u 22:40 GMT+1]

[Ovu poruku je menjao zormar dana 06.02.2007. u 23:23 GMT+1]

[Ovu poruku je menjao krckoorascic dana 09.02.2007. u 13:08 GMT+1]
[ dennycd2 @ 06.02.2007. 21:15 ] @
Prvo, nije mi jasno kako moze petlja da radi do EOF kada u njoj nema MoveNext (nisam primetio ni MoveFirst)? Drugo, cemu sluzi Timer?
[ zormar @ 06.02.2007. 21:43 ] @
Slucajna greska za MoveNext, dopisao sam.
Mozes li da ispravis ovaj kod da radi ispravno, ili da mi das neki primer da vidim kako to ide?
Sada prijavljuje gresku 3021:
Either BOF or EOF is True, or the current record has been deleted.Requested operation requires a current record.
u redu Form2.Adodc2.Recordset.MoveNext.

[Ovu poruku je menjao zormar dana 06.02.2007. u 23:09 GMT+1]
[ goranvuc @ 06.02.2007. 22:30 ] @
Citat:
zormar:Sada prijavljuje gresku 3021:
Either BOF or EOF is True, or the current record has been deleted.Requested operation requires a current record.
u redu Form2.Adodc2.Recordset.MoveNext.

[Ovu poruku je menjao zormar dana 06.02.2007. u 23:09 GMT+1]

Verovatno u nekoj od funkcija UkBroj1....UkBroj10 (a po mojoj pretpostavci u svim navedenim) takodje "petljas" sa pozicioniranjem u rekordsetu. Daj primer samo jedne od njih i zavrsavamo ti stvar.
[ zormar @ 06.02.2007. 22:38 ] @
Evo kod za Label1, i tako se nastavlja.
Popunjavanje forme sa labelama je sasvim u redu.
Code:


Function UkBroj1()
   dblSuma = 0  
 dblKriterijum = 1

   If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst
   Do While Not Form2.Adodc2.Recordset.EOF   '
               If Form2.Adodc2.Recordset("PRVI") = dblKriterijum Then
                  dblSuma = dblSuma + 1
              End If
         Form2.Adodc2.Recordset.MoveNext
    Loop
   If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst
   Do While Not Form2.Adodc2.Recordset.EOF
               If Form2.Adodc2.Recordset("DRUGI") = dblKriterijum Then
                  dblSuma = dblSuma + 1
              End If
         Form2.Adodc2.Recordset.MoveNext
    Loop
      If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst
   Do While Not Form2.Adodc2.Recordset.EOF
               If Form2.Adodc2.Recordset("TRECI") = dblKriterijum Then
                  dblSuma = dblSuma + 1
              End If
         Form2.Adodc2.Recordset.MoveNext
    Loop
      If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst
    Do While Not Form2.Adodc2.Recordset.EOF
               If Form2.Adodc2.Recordset("CET") = dblKriterijum Then
                  dblSuma = dblSuma + 1
              End If
            Form2.Adodc2.Recordset.MoveNext
    Loop
   If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst
   Do While Not Form2.Adodc2.Recordset.EOF   '
               If Form2.Adodc2.Recordset("PETI") = dblKriterijum Then
                  dblSuma = dblSuma + 1
               End If
         Form2.Adodc2.Recordset.MoveNext
    Loop
Form5.Label1.Caption = dblSuma
end function



[Ovu poruku je menjao krckoorascic dana 09.02.2007. u 13:08 GMT+1]
[ dennycd2 @ 06.02.2007. 22:46 ] @
Analiziraj ovaj kod, prvo sa "DoEvents", a posle bez. Nadam se da ce ti biti mnogo jasnije.
[ goranvuc @ 06.02.2007. 23:02 ] @
Joooj, ajde malo vise ubuduce, da ne glumimo detektive ;)

Znaci, ideja je da kad korisnik klikne na "cmdUk" dugme, ti izracunas sume i popunis labele, zar ne? Posto je to duzi proces, ti si zamislio jedan progresbar koji ce da daje informaciju o napredovanju racunanja, zar ne?
Labele ti sluze za zbir svih vrednosti po kolonama i redovima koje odgovaraju
nekoj odredjenoj vrednosti dblKriterijum, zar ne?

Ako je to sve tako, kao sto sam pretpostavio (a ti nisi dovoljno jasno objasnio) onda bi kao prva primedba bila sam nacin kako dolazis do pojedinacne sume: za svaku pojedinacnu sumu ti se pozicioniras na odredjenu kolonu, pa onda od pocetka do kraja ispitujes i sabiras, da bi to isto ponovo radio za drugu kolonu ... umesto da sve uradis u jednom prolazu!!!

Ako je ta tvoja funkcija u izvornom obliku kako je koristis, ja bi onda ovako to napravio: umesto tih tvojih 10 funkcija, napravio bih jednu sa parametrom dblKriterijum:
Code:

Function UkBroj(byval dblKriterijum As Double) As Double
Dim dblSuma As Double

dblSuma = 0

If Form2.Adodc2.Recordset.RecordCount > 0 Then Form2.Adodc2.Recordset.MoveFirst

Do While Not Form2.Adodc2.Recordset.EOF '

If Form2.Adodc2.Recordset("PRVI") = dblKriterijum Then
    dblSuma = dblSuma + 1
End If
If Form2.Adodc2.Recordset("DRUGI") = dblKriterijum Then
    dblSuma = dblSuma + 1
End If
If Form2.Adodc2.Recordset("TRECI") = dblKriterijum Then
    dblSuma = dblSuma + 1
End If
If Form2.Adodc2.Recordset("CET") = dblKriterijum Then
    dblSuma = dblSuma + 1
End If
If Form2.Adodc2.Recordset("PETI") = dblKriterijum Then
    dblSuma = dblSuma + 1
End If

Form2.Adodc2.Recordset.MoveNext

Loop

UkBroj = dblSuma

End Function

Naravno, ovaj kod bi se dao jos poprilicno srediti, ali sta je tu je ;)

Sada bi tvoja glavna procedura izgledala ovako:
Code:

Private Sub cmdUk_Click()
Dim varKriterijumi
Dim intCounter As Integer

varKriterijumi = Array(11, 22, 33, 44, 55, 66, 77, 88, 99, 110) ' ovo bi trebalo da budu tvoji kriterijumi, ja sam stavio neke bezveze vrednosti

ProgressBar1.Visible = True
ProgressBar1.Min = 1
ProgressBar1.Max = 10

For intCounter = 0 To UBound(varKriterijumi)

    DoEvents
    Form5.Controls("Label" & (intCounter + 1)).Caption = UkBroj(varKriterijumi(intCounter))
    ProgressBar1.Value = ProgressBar1.Value + 1

Next

ProgressBar1.Visible = False

Form5.Show

end sub

Naravno, Timer ti ni ne treba!

Ako ne radi nesto, izvini, sve sam pisao direktno kroz ES. Bitna je ideja, dalje ces se valjda snaci.
[ zormar @ 06.02.2007. 23:23 ] @
Sad je sve jasno.
Zahvaljujem obojici na pomoci.
[ zormar @ 27.02.2007. 20:58 ] @
Ovaj prethodni kod, prilagodjen mom programu, je normalno radio.
Sad mi izbacuje Error 9:Subscript out of rang.
Sta se tu poremetilo, sta nije u redu?
[ goranvuc @ 27.02.2007. 23:48 ] @
Znas i sam sta sad sledi: Postavi kod
[ zormar @ 28.02.2007. 08:52 ] @
Evo kod:
Code:

Private Sub cmdPoBrojevima_Click()
Dim varKriterijumi
Dim intCounter As Integer

varKriterijumi = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)

For intCounter = 0 To UBound(varKriterijumi)
    DoEvents
    Form4.Controls("Label" & (intCounter + 1)).Caption = Broj(varKriterijumi(intCounter))
Next

Form4.Show ' ovde se nalaze labele u koje se upisuju sume

Adodc1.Refresh
MSHFlexGrid1.ColAlignment = flexAlignCenterCenter
End Sub


Ovo je u modulu :
Code:

Function Broj(ByVal dblKriterijum As Double) As Double
Dim dblSuma As Double

dblSuma = 0

If Form2.Adodc1.Recordset.RecordCount > 0 Then Form2.Adodc1.Recordset.MoveFirst
Do While Not Form2.Adodc1.Recordset.EOF 

    If Form2.Adodc1.Recordset("GOD") = dblKriterijum Then
      dblSuma = dblSuma + 1
    End If

Form2.Adodc1.Recordset.MoveNext
Loop
Broj = dblSuma

End Function
[ goranvuc @ 28.02.2007. 09:15 ] @
Problem je u tome sto imas neku labelu koja nema naziv Label & (intCounter + 1) - znaci imas na formi Label1, Label2 ...... pa sve do Label25, ali jednu od njih nisi dobro imenovao. Ako nije to, ne znam sta drugo moze biti, jer je sve ostalo korektno.
[ zormar @ 28.02.2007. 09:52 ] @
Proverio sam, sto se tice labela sve su korektno imenovane.
Ovaj kod imam na jos 2 mesta u programu i tu radi bez problema.
pozdrav
[ goranvuc @ 28.02.2007. 10:18 ] @
Pomoglo bi ako bi naznacio red u kom dolazi do navedene greske.
[ zormar @ 28.02.2007. 13:23 ] @
Gresku prijavljuje u ovom redu:
Code:
Form4.Controls("Label" & (intCounter + 1)).Caption = Broj(varKriterijumi(intCounter))

Usput ako znas da mi kazes da li je usled strujnog udara moglo da dodje do ostecenja hard diska - pojavio se bad sektor.
[ goranvuc @ 28.02.2007. 13:29 ] @
Greska se javlja tamo gde sam i mislio, samo je izgleda nesto drugo u pitanju, a to drugo mi lici na sledeci problem:

Da li ti se u formi koja sadrzi tvoj kod, u delu za deklaracije na nivou modula (bukvalno receno, na pocetku koda forme) nalazi mozda tekst "Option Base 1" ili nesto slicno?
[ zormar @ 28.02.2007. 13:49 ] @
Da, na pocetku je bilo Option Explicit.
Sad kad sam to izbrisao vise ne prijavljuje gresku, prikazuje mi Form4, ali u labelama ne ispisuje sume vec nule.
[ goranvuc @ 28.02.2007. 13:56 ] @
Option Explicit treba da ostavis, to sluzi da te VB obavesti kad zaboravis da deklarises neku promenljivu. Na osnovu ovoga sto si sad naveo izgleda mi kao da si zaboravio u ovoj proceduri koja ti pravi problem da napunis niz varKriterijumi, tj. kao da si zaboravio ovu liniju koda:
Code:

varKriterijumi = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)
[ zormar @ 28.02.2007. 14:02 ] @
Ne, nisam je zaboravio, upisana je.
[ goranvuc @ 28.02.2007. 14:07 ] @
Sve sto je moglo da prouzrokuje problem sam te pitao, jedino da te opet zamolim da uploadujes projekat, zajedno sa tom tvojom bazom da bi mogao u test rezimu da vidim sta se desava, lici mi na neki banalan previd, a ovo sto si stavio od koda ocigledno nije dovoljno da otkrijemo problem, tj. problem je u nekom modulu koji nam nisi dao na uvid.

Ako neces da javno objavljujes projekat, posalji mi na mail, pa cu ti resiti problem.
[ Shadowed @ 28.02.2007. 14:21 ] @
Probaj da zamenis For intCounter = 0 To UBound(varKriterijumi) sa For intCounter = 0 To UBound(varKriterijumi) - 1.
[ goranvuc @ 28.02.2007. 14:24 ] @
@Shadowed, poenta je da mu radi procedura za sve clanove niza, a ne da preskace poslednjeg clana. Mozda mu nece javljati gresku, ali nije to problem ovde.
[ zormar @ 28.02.2007. 15:29 ] @
I dalje izbacuje poruku Error 9
[ Shadowed @ 28.02.2007. 16:21 ] @
Ma, ja se vise i ne secam kako tacno 6ica radi sa indeksima. Em su se namenjali toga kasnije em na raznim mestima se srecu razni nacini indeksiranja. zato sam mu rekao da proba pa bi se videlo da li je to u pitanju.
[ goranvuc @ 28.02.2007. 17:23 ] @
A koji deo koda u liniji gde javlja gresku ti debugger markira, kada odes na debug mode? Mislim na momenat kada ti VB javi gresku, pa ti onda kazes OK, pa onda VB obelezi deo programskog koda koji je problem - da opet malo banalizujem.

Ovo je bitno, jer ako ti obelezi Form4 onda je tamo problem, a ne ovde.
[ zormar @ 28.02.2007. 17:56 ] @
Obelezi ovu liniju
Code:
Form4.Controls("Label" & (intCounter + 1)).Caption = Broj(varKriterijumi(intCounter))
[ goranvuc @ 28.02.2007. 17:57 ] @
Obelezi ceo red (markira drugom bojom)?

Hajde molim te, kopiraj kompletan kod sa forme na kojoj se javlja ova greska i stavi ga ovde (kad vec neces ni da uploadujes, ni da saljes), ali odmah, jer nemam posle vremena.
[ zormar @ 28.02.2007. 17:58 ] @
Da, ceo red zazuti
[ goranvuc @ 28.02.2007. 18:04 ] @
Mogli smo ovo jos juce da resimo, ti kao da neces da ti se pomogne ;)
[ zormar @ 28.02.2007. 18:16 ] @
Iz prethodne tvoje poruke mi je bila prikazan samo prvi red, pa sam ti zato tako odgovorio.
Sto se tice koda stvarno je prevelik, videcu kad malo sredim da ti posaljem.
[ goranvuc @ 28.02.2007. 19:37 ] @
OK, nisi morao da sredjujes nista, nismo na izlozbi

Pozdrav!
[ zormar @ 28.02.2007. 22:11 ] @
@goranvuc
Covece veruj mi da imam veliku zelju da ovaj program napravim. Verovatno od te prevelike zelje ne mogu u celini ni da ga uploadujem niti da ga posaljem.
Ovo sada nije nikakva isprika, posto sam naveo pravi razlog ako ga prihvatas, ali racunar mi je skroz poludeo poceo ja da brlja.
Interesuje me da li si mi slao neku privatnu poruku posto imam 2 registrovane, istog sadrzaja kao i tvoji odgovori na forumu.
Pojavio mi se i neki trojanac, pa mislim da je to uzrok svih ovih problema (ISAM, Error 9).
Resio sam da formatiram hard disk pa onda da vidim sta ce biti.
[ zormar @ 03.03.2007. 21:37 ] @
@goranvuc
Samo da te obavestim da sam resio problem. Greska je bila u deklarisnju promenljive, tako da je sada ista promenljiva i u proceduri i u modulu.
Sad ovo radi ispravno.
Code:
Private Sub cmdPoBrojevima_Click()
Dim dblKriterijum    <---------------------- umesto varKriterijumi
Dim intCounter As Integer

dblKriterijum = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25)

For intCounter = 0 To UBound(dblKriterijum)
    DoEvents
    Form4.Controls("Label" & (intCounter + 1)).Caption = Broj(dblKriterijum(intCounter))
Next

Form4.Show ' ovde se nalaze labele u koje se upisuju sume

Adodc1.Refresh
MSHFlexGrid1.ColAlignment = flexAlignCenterCenter
End Sub

ovo se nalazi u modulu
Code:

Function Broj(ByVal dblKriterijum As Double) As Double
Dim dblSuma As Double

dblSuma = 0

If Form2.Adodc1.Recordset.RecordCount > 0 Then Form2.Adodc1.Recordset.MoveFirst
Do While Not Form2.Adodc1.Recordset.EOF 

    If Form2.Adodc1.Recordset("GOD") = dblKriterijum Then
      dblSuma = dblSuma + 1
    End If

Form2.Adodc1.Recordset.MoveNext
Loop
Broj = dblSuma

End Function

Po ko zna koji put se zahvaljujem na pomoci i izvinjavam za ovu silnu prepisku.
Nadam se da ces mi opet pomoci ako (kad) nesto zatreba.
pozdrav