|
[ bobiris @ 19.07.2003. 05:41 ] @
| Imam sledeći događaj u formi:
Private Sub Form_Current()
Dim rs As Object
Set rs = Form.Recordset
For Each record In rs.Fields
If godina.Value = 2002 And RangSen2002 = 1 Then
ZB2002Sen = ZB2002Sen + 5
ElseIf godina.Value = "2002" And RangSen2002 = 2 Then
ZB2002Sen = ZB2002Sen + 3
ElseIf godina.Value = "2002" And RangSen2002 = 3 Then
ZB2002Sen = ZB2002Sen + 1
ElseIf godina.Value = "2002" And RangSen2002 > 3 Then
ZB2002Sen = ZB2002Sen
End If
Next
End Sub
ZB2002Sen je vreme koje treba da se poveća za (recimo, +5) ako je RangSen2002 = 1, za +3 ako je RangSen2002 = 2 itd..
Problem je što ja u konkretnom slučaju za 2002 godinu imam 7 zapisa, a kod prođe svaki put samo kroz prvi zapis (7 puta) i svaki put doda na PRVI zapis po +5, pošto je u konkretnom slučaju RangSen2002 = 1. Ostali zapisi ostaju nepromenjeni.
Meni treba da kod prođe JEDANPUT kroz SVE zapise i, zavisno od uslova doda određeni broj poena.
Može li neko da mi pomogne, da mogu pisati kod dalje, za ostale godine i uslove.
Hvala! |
[ DraganK @ 19.07.2003. 14:39 ] @
Kao prvo, ne valja da recordset instanciraš kao objekat, već kao što i jeste, bilo ado ili dao recordset.
A što se tiče konkretnog primera, ne valja ti petlja. Treba ti petlja u petlji...
dim fld as adodb.field ' ako je ado...
rs.movefirst
while not rs.eof
for each fld in rs.fields
'kod
next
rs.movenext 'ovo ti je falilo...
wend
[ bobiris @ 19.07.2003. 18:41 ] @
OK, evo napisao sam kako si rekao:
Private Sub Form_Current()
Dim rs As adodb.Recordset
Dim fld As adodb.Field
rs.MoveFirst
While Not rs.EOF
For Each fld In rs.Fields
If godina.Value = 2002 And RangSen2002 = 1 Then
ZB2002Sen = ZB2002Sen + 5
ElseIf godina.Value = "2002" And RangSen2002 = 2 Then
ZB2002Sen = ZB2002Sen + 3
ElseIf godina.Value = "2002" And RangSen2002 = 3 Then
ZB2002Sen = ZB2002Sen + 1
ElseIf godina.Value = "2002" And RangSen2002 > 3 Then
ZB2002Sen = ZB2002Sen
End If
Next
rs.MoveNext
Wend
End Sub
Medjutim, dobijem poruku:
"Object variable or With block variable not set"
To je verovatno jer fali ono "Set rs = form.recordset" koje sam ja imao. Ako ga ostavim, kaze "Type mismach".
Sta da napisem za "set rs" varijablu?
[ DraganK @ 19.07.2003. 21:16 ] @
Skloni ovo
Dim rs As adodb.Recordset
a vrati tvoju liniju
Set rs=form.recordset
Tu ima gomila nepoznanica, šta je u tvom kodu record, godina, RangSen2002... kao da si koristio neki wizard koji bounduje rs za formu i polja za kontrole.
Ako ni posle ovoga ne radi, možda se povezuješ preko dao a ne ado...?
Uostalom, to ti je samo smer kuda da tražiš grešku (petlja), sorry...
[ bobiris @ 20.07.2003. 11:03 ] @
Pa evo, otvorio sam i konekciju (izgleda da je to trebalo), i onaj tvoj kod radi, ali opet racuna samo prvi zapis. Pokusacu da objasnim (ako imas volje i vremena):
Kao prvo, sve podatke vucem iz tabele koju sam pomocu MakeTable Query-a napravio za Rang lisltu.
Rang2002Sen je polje u kome stoji podatak o osvojenom mestu na takmicenju
ZB2002Sen je iznos poena, na koji treba dodati +5, ako je 1 mesto, +3 ako je drugo mesto i +1 ako je doticni takmicar na 3 mestu, a ostaviti ga kako jeste, ako je ispod treceg mesta. Ono "If godina + 2002" sam stavio zato sto sam u MakeTable Querry-u postavio uslov, pa prilikom pokretanja tog querija iz jednog menija koji pokrece ovu formu, prvo pita za godinu, posto se program pravi za 10 godina unapred.
Mislim da sam logicki dobro smislio, samo ne znam zasto ne prolazi kroz sve zapise, vec se vrti oko prvog i stalno njemu dodaje (u konkretnom slucaju, kod prvog clana, koji je na prvom mestu, +5 vise puta, tako da dobijem za prvog clana rezultat 697 i tako nesto, a treba da bude 19,44 (Zb2002Sen) + 5 (jer jer RangSen2002 + 1)
Poslao bih ti skracenu bazu, ali ne vidim ovde kako se "kaci" atachment.
Ovo mi postaje vec "goruci problem", pa ako hoces i mozes, pomozi!
[ bobiris @ 20.07.2003. 11:31 ] @
Usvari, evo koda koji NE proizvodi grešku, ali daje rezultat samo u prvom zapisu, i to pogrešan: Treba na 19,44 da doda +5, i da dobije 24,44, a on napravi 799,44 !!!
Ne znam kako je izracunao bas ovu cifru.
Private Sub Form_Load()
Dim rs As ADODB.Recordset
Dim fld As ADODB.Field
Set rs = New ADODB.Recordset
Dim newCon As ADODB.Connection
Set newCon = New ADODB.Connection
newCon.ConnectionString = "Data Source=Golub_boza"
newCon.Open
rs.Open "select * from rangtable", newCon, adOpenKeyset, adLockOptimistic
rs.MoveFirst
While Not rs.EOF
For Each fld In rs.Fields
If Godina.Value = 2002 And RangSen2002 = 1 Then
ZB2002Sen = ZB2002Sen + 5
ElseIf Godina.Value = "2002" And RangSen2002 = 2 Then
ZB2002Sen = ZB2002Sen + 3
ElseIf Godina.Value = "2002" And RangSen2002 = 3 Then
ZB2002Sen = ZB2002Sen + 1
ElseIf Godina.Value = "2002" And RangSen2002 > 3 Then
ZB2002Sen = ZB2002Sen
End If
Next
rs.MoveNext
Wend
newCon.Close
Set newCon = Nothing
End Sub
[ DraganK @ 20.07.2003. 12:20 ] @
Probaj ovako, bez fielda, to ti onda ne treba...
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim newCon As ADODB.Connection
Set newCon = New ADODB.Connection
newCon.ConnectionString = "Data Source=Golub_boza"
newCon.Open
rs.CursorLocation = adUseClient
rs.Open "select * from rangtable", newCon, adOpenKeyset, adLockOptimistic
rs.MoveFirst
While Not rs.EOF
If Godina.Value = "2002" And rs.Fields("RangSen2002").Value = 1 Then
ZB2002Sen = ZB2002Sen + 5
ElseIf Godina.Value = "2002" And rs.Fields("RangSen2002").Value = 2 Then
ZB2002Sen = ZB2002Sen + 3
ElseIf Godina.Value = "2002" And rs.Fields("RangSen2002").Value = 3 Then
ZB2002Sen = ZB2002Sen + 1
ElseIf Godina.Value = "2002" And rs.Fields("RangSen2002").Value > 3 Then
ZB2002Sen = ZB2002Sen
End If
rs.MoveNext
Wend
rs.Close
newCon.Close
Set rs = Nothing
Set newCon = Nothing
[ Sasa Vitorovic @ 20.07.2003. 13:29 ] @
I ja se slazem...
Ako te nismo dobro razumeli daj spisak polja ovde.
P.S.Naredba for each/next ti mozda ne valja.Kad kucas na primer 'for each control' moras zavrsiti sa 'next control'.
[ bobiris @ 20.07.2003. 14:17 ] @
Evo pravog resenja, ovo radi kako treba:
Private Sub Form_Load()
Dim rs As Object
Set rs = Form.Recordset
While Not rs.EOF
If godina.Value = 2002 And RangSen2002 = 1 Then
ZB2002Sen = ZB2002Sen + 5
ElseIf godina.Value = "2002" And RangSen2002 = 2 Then
ZB2002Sen = ZB2002Sen + 3
ElseIf godina.Value = "2002" And RangSen2002 = 3 Then
ZB2002Sen = ZB2002Sen + 1
ElseIf godina.Value = "2002" And RangSen2002 > 3 Then
ZB2002Sen = ZB2002Sen
End If
rs.MoveNext
Wend
End Sub
Znaci: NE TREBA "For Each record In rs.Fields" i
NE TREBA: "Next"
Ovo "Next" je pravilo svu zbrku, jer se vracao na prvi zapis i odradjivao ga tacno 26 puta (!) i svaki put dodavao po +5, tako da sam dobijao 149,44 (pocetni rezultat je bio 19,44)
Hvala svima na pomoci!
"Čačkam, čačkam, pa isčačkam"
P.S. Makar to trajalo i 2 noći.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|