webForumDet fria alternativet

Itereringsproblem

6 svar · 458 visningar · startad av CatZ

CatZMedlem sedan jan. 20022 341 inlägg
#1

Försöker få följande Sub att skriva ut select:er för ALLA produkter som finns i databasen inte bara den första.... Jag kommer ingenstans vad är det som jag gjort fel här?

Sub sSelectProducts
	dim strSQL, objRS
	dim intUsers, intCost, intLicenseID, intLicenseID2
	dim strProdLong, strUsers
	
	strSQL = "SELECT tblLicenses.licenseID, tblLicenses.licensePrice, tblLicenses.licenseUsers," & _
			 " tblProducts.productShort, tblProducts.productTitle " & _
			 " FROM tblProducts INNER JOIN tblLicenses " & _
			 " ON tblProducts.productID = tblLicenses.productID " & _
			 " WHERE tblProducts.productDescr <> '' "
	set objRS = objConn.Execute(strSQL)
	
	strProdLong		= objRS("productTitle")	
	
	response.write "<select id=""req_formUsers"" name=""req_formUsers"">" & _
			"<option value=""0"">" & strProdLong & "</option>" & vbCrLf
	Do While NOT objRS.EOF
	
		intLicenseID	= CInt(intLicenseID)
		intLicenseID2	= CInt(objRS("licenseID"))
		intUsers 		= CInt(objRS("licenseUsers"))
		intCost	 		= CInt(objRS("licensePrice"))
		strUsers 		= intUsers & " Users = $ " & intCost
	
		Response.Write "<option value=""" & intLicenseID2 & """ " & vbCrLf
			If intLicenseID = intLicenseID2 Then
				Response.Write """ selected=""selected"" "
			End If
		Response.Write ">" & strUsers & "</option>" & vbCrLf				
	objRS.movenext
	Loop
	response.write "</select>" & vbCrLf
End Sub

Det finns bara två produkter i databasen än så länge. Båda har något i productDescr-fältet och båda har licenser/priser i tblLicenses... förstår inte varför det blir fel. Måste jag flytta tillbaka i recordsetet eller vad är det som händer egentligen?

@ndersMedlem sedan juni 200026 914 inlägg
#2

Ställ frågan direkt i din dbms (access?) och se så du verkligen får ut alla poster.

CatZMedlem sedan jan. 20022 341 inlägg
#3

Japp det fungerar som det ska. Det hamnar en liten rad med produktID 2 där :) Vänta lite alla produkter skrivs ju ut under samma fråga ska jag behöva nästla själva utskriften? Såg precis att min andra produkt inte alls skrivs ut i en egen select utan hamnar underst i den första givetvis.

Är det ok att köra två olika sql frågor och hämta produktid i den första och sedan loopa igenom den och skriva ut all license info i en ny nästlad loop?

Kan man lösa det i själva frågan på något vis?

@ndersMedlem sedan juni 200026 914 inlägg
#4

Ok, så du menar att produkterna visst visas allihopa?
Lägg in hela select:en i loopen så bör det väl bli rätt?

Är det ok att köra två olika sql frågor och hämta produktid i den första och sedan loopa igenom den och skriva ut all license info i en ny nästlad loop?

Nej, det tycker jag inte är OK. Använd en join som den du har.

CatZMedlem sedan jan. 20022 341 inlägg
#5

Alltså varje produkt ska ha en egen select. Och varje pris/license ska vara ett option värde i selecten. Gör jag på första viset skrivs bara en select ut med alla licenser som option. Gör jag på ditt föreslagna vis så skrivs selecten ut en gång för varje license.

Bifogar två bilder som ilustrerar mitt dilemma:

orginalet(min_version).pnganders_forslag.png
@ndersMedlem sedan juni 200026 914 inlägg
#6

Då får du sätta en kontrollvariabel i loopen, så du håller koll om det är samma produkt som tidigare, eller en ny, då får du skriva ut <select> och </select>. Är det inte den första produkten, så måste du sätta en </select> innan du börjar med den nya.

CatZMedlem sedan jan. 20022 341 inlägg
#7

Jamen givetvis :r Usch vad pinsamt. Ni vet hur det är... man stirrar sig blind på koden hehe lösningen blir då

	i = 0
	Do While NOT objRS.EOF
		intProductID	= CInt(objRS("productID"))
		intLicenseID	= CInt(intLicenseID)
		intLicenseID2	= CInt(objRS("licenseID"))
		intUsers 		= CInt(objRS("licenseUsers"))
		intCost	 		= CInt(objRS("licensePrice"))
		strUsers 		= intUsers & " Users = $ " & intCost
		strProdLong		= objRS("productTitle")
		
		If i < intProductID Then
			i = intProductID
			Response.Write "<select id=""req_formUsers"" name=""req_formUsers"">" & vbCrLf	
			Response.Write "<option value=""0"">" & strProdLong & "</option>" & vbCrLf	
		End If
			Response.Write "<option value=""" & intLicenseID2 & """ " & vbCrLf
			If intLicenseID = intLicenseID2 Then
				Response.Write """ selected=""selected"" "
			End If
			Response.Write ">" & strUsers & "</option>" & vbCrLf			
	objRS.movenext
	Loop
	response.write "</select>" & vbCrLf
Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb