Prikazi cijelu temu 26.05.2016 13:49
Avko Van mreze
Administrator
Registrovan od:28.05.2014
Lokacija:zagreb


Predmet:Re: Problem Petlja
steta sto nemamo neke podatke u bazi pa bi mogli malo isprobavati, al' cini mi se da je problem u petlji jer:
do 4.5.2016 radi korektno a onda samo "listira" a ne zbroji (sumira), tj. svaki dan zbroji.

problem bi bio u funkciji: Public Function taxaOddo()

u ovom dijelu koda:
PreuzmiIzvorni kôd (Text):
  1. Print #1, "----------------------------------------"
  2. rst.MoveFirst
  3. Do Until rst.EOF
  4.    Suma = Suma + rst!SumOfiznos
  5.    rst.MoveNext
  6. Loop
  7. rst.MoveFirst

cini mi se, a nisam bas siguran jer nisam neki strucnjak, da ti je EOF na kraju i nema podataka t.j. next, bar ja tako mislim

EOF se zalaže za kraj datoteke - u slučaju baze podataka recordsets to znači da si na posljednjrm zapisu (ako pokuÅ¡aÅ¡ napraviti Recordset.MoveNext dobit čeÅ¡ greÅ¡ku, jer ne postoji zapis nakon Å¡to je ovaj jedan). ImaÅ¡ li kakvu greÅ¡ku?

BOF označava početak datoteke - u slučaju baze podataka recordsets to znači da si na prvom slogu (ako pokuÅ¡aÅ¡ napraviti Recordset.MovePrevious dobiti čeÅ¡ greÅ¡ku, jer ne postoji zapis prije ovoga)

ImeDatoteke.Recordset.MoveNext
If ImeDatoteke.Recordset.EOF = True Then
ImeDatoteke.Recordset.MoveLast

ImeDatoteke.Recordset.MovePrevious
If ImeDatoteke.Recordset.BOF = True Then
ImeDatoteke.Recordset.MoveFirst

ja bi stavio MsgBox da mi ispise podatak svaki puta i Breakpoint da se zaustavi, pa bi za F8 (cini mi se da je ta tipka) izvrtio funkciju do ponovo breakpointa i u msgboxu bi mi bio drugi podatak.

PreuzmiIzvorni kôd (Text):
  1. Dim strSQL As String
  2. Dim rs As DAO.Recordset
  3.  
  4. strSQL = "KORISNIK"
  5. strSQL="
  6.         SELECT * from Qzaperiod1
  7.         WHERE datum
  8.                 BETWEEN DATEVALUE('" & pocetni & "') AND DATEVALUE('" & krajnji & "')
  9.         "
  10.  
  11. Set rs = CurrentDb.OpenRecordset(strSQL)
  12.  
  13. WITH rs
  14.  
  15.     IF NOT .BOF AND NOT .EOF Then 'provjerimo dali uopce ima podataka u bazi
  16.         'dobro je pomaknuti se na kraj baze pa onda opet na pocetak
  17.         'nije neophodno ali ponekad zna pomoci
  18.         .MoveLast
  19.                 .MoveFirst
  20.        
  21.         WHILE (Not .EOF)
  22. 'WHILE LOOP petlja u kojoj kada dodemo do kraja baze (EOF)izlazimo iz petlje
  23.         Debug.Print rs.Fields("imeKolone1") & " " & rs.Fields("imeKolone2")
  24. ' mozes podatke umjesto u msgbox ispisivati u debug (immediate window)
  25.             .MoveNext
  26. 'petlja nastavlja dalje i ispisuje u immedia prozoru, mozemo zaustaviti sa break point ili CTRL+Break
  27.         WEND
  28.     END IF
  29.     .close
  30. END WITH

zakljucak:
nakon sto izlista za 5.5.2016 nemoze zbrojiti za taj dan jer je EOF na kraju i onda ti se ne "izvrti" onaj dio za sumu, jer nema nista (nema podatak jer si na kraju).

ali to je samo moje onako logicko razmisljanje pa mislim da treba pricekati strucnjake da ti pogledaju to
zivot je moja domovina.
Ovaj post je ureden 5 puta. Posljednja izmjena 26.05.2016 14:27 od strane Avko.