webForumDet fria alternativet

Varför blir får jag "Undantag Inträffade" i den här loopen?

ASP

2 svar · 181 visningar · startad av leakim

Medlem sedan juni 20018 inlägg
Frågan#1

Hej

Nu har jag i tre dagar försökt förstå varför nedanstående kod genererar felmeddelandet "Undantag Inträffade" i Explorer.

Utgångsläget är detta:
Jag har ett recordset (undermenyRS) med kolumnerna "ar" (långt heltal) och "album" (text). Innehållet i recordsetet är för närvarande som följer:

ar album
2002 Las Vegas1
2001 Las Vegas2
2000 Dominikanska1
2000 Dominkanska2

Utifrån detta vill jag skriva ut en del av ett JavaScript som ser ut som nedan:

rubriker=new Array('2002', '2001', '2000');

meny1rubriker=new Array('Las Vegas1'); 

meny2rubriker=new Array('Las Vegas2'); 

meny3rubriker=new Array('Dominikanska1', 'Dominikanska2');

För att göra detta har jag använt mig av följande ASP-kod:

foregaendear = undermenyRS("ar")
for i=1 to x
	Response.Write("meny" &i& "rubriker=new Array(")
	do while foregaendear = undermenyRS("ar")
		Response.Write("'" &undermenyRS("album")& "'")
		foregaendear = undermenyRS("ar")
		if not undermenyRS.EOF then
			undermenyRS.MoveNext
			if foregaendear = undermenyRS("ar") then
				Response.Write(", ")
			end if
		else 
			foregaendear = 1
		end if
	loop
	Response.Write("); " & chr(10))
	foregaendear = undermenyRS("ar")
next

x är en variabel som innehåller antalet olika årtal i recordsetet, i det här fallet 3. Problemet är att så fort den näst sista kodraden läggs till får jag felmeddelandet "Undantag inträffade". Enligt Explorer inträffade undantaget på raden med den första IF-satsen. Tar jag bort If-satsen hamnar felet på första raden i av DO while-satsen.

Jag har provat allt jag kan komma på, men ingenting hjälper. Har jag använt en konstig metod för att åstakomma det jag vill? Har jag brutit mot någon regel i ASP?

All hjälp uppskattas stort.

Tack på förhand
/micke

Medlem sedan dec. 19996 721 inlägg
#2

Felet beror på att du har en Movenext ovanför den sista "accessen" till recordset.

foregaendear = undermenyRS("ar")
for i=1 to x
	Response.Write("meny" &i& "rubriker=new Array(")
	do while foregaendear = undermenyRS("ar")
		Response.Write("'" &undermenyRS("album")& "'")
		foregaendear = undermenyRS("ar")
		if not undermenyRS.EOF then
			[b]undermenyRS.MoveNext[/b]
			if foregaendear = undermenyRS("ar") then
				Response.Write(", ")
			end if
		else 
			foregaendear = 1
		end if
	loop
	Response.Write("); " & chr(10))
	foregaendear = [b]undermenyRS("ar")[/b]
next

..eftersom undermenyRS riskerar att bli EOF efter en Movenext kommer den sista accessen att bli "förbjuden"

Medlem sedan juni 20018 inlägg
#3

Okej. Tack så mycket. Jag förstår varför det blir fel men det jag kan inte komma på någon lösning på hur jag ska göra för att få det att fungera.

Finns det något förslag för att komma runt det här problemet? Som jag tänker och som jag utformat den här programsatsen måste jag tilldela "foregaendear" det aktuella värdet på "undermenyRS("ar")" antingen före eller efter do-while-satsen för att programmet ska gå in i do-while-satsen på alla varv mellan 2 och x.

Finns det något bättre sätt att få fram det resultat jag vill ha utifrån det recordset som jag har?

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)