webForumDet fria alternativet

Script som ska plocka fler poster visar bara den första.

ASP

6 svar · 439 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tjena
Har satt ihop en liten koll i ett anmälningsscript om personen tidigare varit anmäld och isf. skall en utskrft göras över tidigare anmälningar.
Nu har jag ett litet problem, att bara en post visas, trots att personen varit anmäld ett flertal gånger tidigare.

			If Request.Form("do") = "checkPersNum" Then
				nPersNum	= Request.Form("nPers1") & "-" & Request.Form("nPers2")
				lId			= Request.Form("lId")

				openDB("def")
				sSql =	"SELECT gId, nPersNum " &_
						"FROM tbl_sSchool_notifications " &_
						"WHERE nPersNum = '" & nPersNum & "'"
				Set rs1 = oConn.Execute(sSql)
				If Not rs1.EOF Then
				' Hittar tidigare personnummer
					gId		=	rs1("gId")
					sSql	=	"SELECT gId, gName, gStartDate, gClosed " &_
								"FROM tbl_sSchool_groups " &_
								"WHERE gId = " & gId & " " &_
								"ORDER BY gStartDate DESC"
					Set rs2	=	oConn.Execute(sSql)
					If Not rs2.EOF Then
					' Hittar tidigare grupp, kolla om stängd eller ej.
						If gId = rs2("gId") AND rs2("gClosed") = False Then
						' Dubbelbokning, informera om detta
								Response.Write("<h4>Du är redan anmäld till " & rs2("gName") & " med start " & rs2("gStartDate") & "</h4>")
						Else
						' Tidigare bokning, lista gamla och gå vidare.
							Response.Write("<h4>Du har tidigare gått i:<br>")
							[b]Do Until rs2.EOF
								Response.Write("- " & rs2("gName") & " med start " & rs2("gStartDate") & "<br>")
							rs2.MoveNext
							Loop[/b]
							Response.Write("</h4>")
						End If
					End If
					Set rs2 = Nothing
				Else
				' Hittar inget tidigare personnummer, gå vidare...
						Response.Write("<h4>Du är inte tidigare anmäld</h4>")
				End If
				Set rs1 = Nothing
				closeDB()
			End If

I det fetstilta området ligger mitt problem (tror jag), där bör ju recset'et loopas igenom för att skriva ut alla tidigare anmälningar.

Min tabelluppbyggnad som är intressant för er kan tänkas vara:

[b]tbl_sSchool_notifications[/b]
gId (Grupp-ID, Tal)
nPersNum (Deltagarens personnummer, Text)

[b]tbl_sSchool_groups[/b]
gId (Grupp-ID, Räknare)
gName (Gruppens namn, Text)
gClosed (Är gruppen stängd?, Ja / Nej)

Har ni något förslag på vettig lösning, kanske man kan slå ihop dessa frågor med en INNER JOIN ?
Har slut på idéer vad som kan vara fel.
Min DBMS är Access.

Tack på förhand!

Medlem sedan okt. 2004392 inlägg
#2

Testa med:

						Else
						' Tidigare bokning, lista gamla och gå vidare.
							Response.Write("<h4>Du har tidigare gått i:<br>")
							[B]rs2.MoveFirst[/B] 
							Do Until rs2.EOF
								Response.Write("- " & rs2("gName") & " med start " & rs2("gStartDate") & "<br>")
							rs2.MoveNext
							Loop
							Response.Write("</h4>")
						End If

Det kan bero på:

					Set rs2	=	oConn.Execute(sSql)
					[B]If Not rs2.EOF Then[/B] 
					' Hittar tidigare grupp, kolla om stängd eller ej.
Medlem sedan feb. 20034 441 inlägg
#3

Provade att byta

rs2.MoveNext

till

rs2.MoveFirst

Det enda som händer är att scriptet gör TimeOut, funkar alltså inte.

Jag vill ju med det här plocka fram alla grupper som är öppna där personen redan anmält sig.
Försökte mecka ihop en fråga med INNER JOIN som bör funka bra till det här, men det är något fel i frågan som jag inte lyckas lösa.

				openDB("def")
				sSql =	"SELECT gName, gDayTime, gStartDate, gClosed, nPersNum " &_
						"FROM tbl_sSchool_notifications sn INNER JOIN tbl_sSchool_groups sg " &_
						"ON sn.gId = sg.gId " &_
						"WHERE sn.nPersNum = '" & nPersNum & "' " &_
						"AND sg.gGlosed = False"
'				Response.Write("<p class=""frmText"">" & sSql & "</p>")
'				Response.End
				Set rs = oConn.Execute(sSql)
				If Not rs.EOF Then
					Response.Write("<h4>Du är redan anmäld till " & rs("gName") & " med start " & rs("gStartDate") & "</h4>")
				Else
					Response.Write("<h4>Du är inte tidigare anmäld</h4>")
				End If
				Set rs = Nothing

Men jag får:

Feltyp:
Microsoft JET Database Engine (0x80040E10)
Det har inte angetts något värde för en eller flera nödvändiga parametrar.
/sss/notification.asp, line 103

Rad 103 är alltså SQL-Frågan.

Några förslag?
Måste verkligen lösa det här, börjar brinna i knutarna.

Tack!

Medlem sedan okt. 2004392 inlägg
#4

Du ska INTE ta bort rs2.MoveNext... du ska lägga rs2.MoveFirst före Do...Loop.
Exakt som det står i mitt exempel.

Du kanske glömde kolla.

Länk

Medlem sedan feb. 20034 441 inlägg
#5

Ahh, Do'h ;)
Kollade förut och när jag såg det fetstilta så antog jag att jag skulle byta ut det.

Tokigt...

Har skrivit om koden helt nu och kommit fram till följande:

				openDB("def")
				sSql =	"SELECT nPersNum " &_
						"FROM tbl_sSchool_notifications " &_
						"WHERE nPersNum IN " &_
						"(" &_
						"SELECT nPersNum FROM tbl_sSchool_notifications sn " &_
						"INNER JOIN tbl_sSchool_groups sg " &_
						"ON sn.gId = sg.gId " &_
						"WHERE sn.nPersNum = '" & nPersNum & "' AND sg.gClosed = FALSE" &_
						")"
'				Response.Write("<p class=""frmText"">" & sSql & "</p>")
'				Response.End
				Set rs = oConn.Execute(sSql)
				If Not rs.EOF Then
					Response.Write("<h4>Du är redan anmäld.</h4><br>")
				Else
					Response.Write("<h4>Tidigare grupper</h4><br>")
					sql =	"SELECT gName, gDayTime, gStartDate, nName, nPersNum " &_
							"FROM tbl_sSchool_groups sg INNER JOIN tbl_sSchool_notifications sn " &_
							"ON sg.gId = sn.gId " &_
							"WHERE sn.nPersNum = '" & nPersNum & "'"
					Set rs2 = oConn.Execute(sql)
					If Not rs2.EOF Then
						Do Until rs2.EOF
							Response.Write(rs2("gName") & "<br>")
						rs2.MoveNext
						Loop
					Else
						Response.WRite("Du är inte anmäld sedan tidigare")
					End If
					Set rs2 = Nothing
				End If
				Set rs = Nothing
				closeDB()

Har provkört fram och tillbaka nu och det verkar funka kanon.
Kanske är mitt gamla (ditt) ett bättre alternativ eller är koden ovan bättre rent prestandamässigt?
På måndag klockan åtta kommer det här nämligen öppnas och då kommer ca. 1000 besökare vilja anmäla sina ungar till vårens simskola så då måste allt funka klockrent.

Tack för hjälpen iallafall!

Medlem sedan okt. 2004392 inlägg
#6

Jag har ingen aning, men jag vet att MoveFirst är en vanlig metod... Inte lika vanlig som MoveNext, men jag tror inte att det tar mer på prestandan att använda sig av dem metoderna som finns tillgängliga.

Som sagt, har ingen aning.

För mer information klicka här.

Medlem sedan feb. 20034 441 inlägg
#7

Aha ok, tack för hjälpen, ska läsa mer om det där senare.
Min kod ovan verkar funka klockrent, blir exakt som jag vill ha det.

;)

304 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
155 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)