webForumDet fria alternativet

SELECT-sats för kryssrutor

8 svar · 252 visningar · startad av Mattias

MattiasMedlem sedan mars 2000205 inlägg
#1

Jag håller på med en sökfunktion i ASP där användaren kan ange kriterier för att utföra en snävare sökning. Ett av kritierierna är att rada upp olika objekt som inte är bokade en angiven vecka (v23-35). Användaren väljer en vecka i en dropdown-meny och vid sökning radas sedan alla objekt upp vars vecka i DBn inte är bokad (alltså ikryssad kryssruta i DBn, dvs FALSE). Respektive vecka (v23-35) representeras av en kolumn i tabellen och raderna i tabellen är de bokningsbara objekten.

Vad jag nu undrar är allså hur jag via en SELECT-sats plockar fram alla de objekt/poster som inte är bokade (ej ikryssade, FALSE) angiven vecka?

@ndersMedlem sedan juni 200032 969 inlägg
#2

Borde funka:

... WHERE fldField = False
MattiasMedlem sedan mars 2000205 inlägg
#3

Ja, så långt hade jag nog klarat själv, men det svåra är att sökningen först ska hitta kolumnen för angiven vecka och därefter leta igenom och plocka ut varje objekt vars kryssruta inte är ifylld. Det är möjligt att jag förklarade det dåligt i mitt första inlägg eller så gör jag det svårare än vad det är. Jag har inte trixat så mkt med ASP/SQL, så jag får skylla på det. ;)

Så här ser iaf tabellen ut (i nedskalad form):

Iofs så är det fler kriterier som anges vid sökningen, vilket komplicerar det hela, men det blir ett senare problem. Det viktiga i nuläget är att se hur man plockar ut objekt utifrån oifyllda kryssrutor.

@ndersMedlem sedan juni 200032 969 inlägg
#4

Har du alltså en asp-variabel med ett veckonummer i, som skall användas för att välja ja/nej-fält i tabellen?

strWeekField = "v35"
strSQL = "SELECT * FROM Tabellen WHERE " & strWeekField & " = False"

Nånting sånt? Möjligen hajar jag galet...

Mvh,

MattiasMedlem sedan mars 2000205 inlägg
#5

Ja, nu hittas de objekt där angiven vecka är obokad. Tack för det! Det uppstod dock ett annat litet problem i anslutning till detta. Svarssidan där objekten radas upp delas in i delsidor (pga många träffar) och när man klickar på en href-länk till en delsida kommer ett felmeddelande upp. Felmeddelandet lyder:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 
'Rum >= 0 AND Bäddar >= 0 AND Bäddar <= 20 AND 
Hav <= 100000 AND Golf <= 100000 AND = False'.

Felmeddelandet hänvisar alltså till en av mina SELECT-satser och på slutet av ovanstående sats så verkar variabeln "Vecka" inte uppfattats innan "= False". Undrar varför?

Kan det ha nåt med länken till sidan att göra? Den koden ser ut så här (jag har kapat koden i sidled för att avlägsna horisontell scrollning på wF):

ref="<a href='" & scriptname & "?rum="&rum&"&mibaddar="&mibaddar&"&mabaddar="&mabaddar
&"&ahav="&ahav&"&golf="&golf&"&omrade="&omrade&"
&whichpage=" & counter
   ref=ref & "&pagesize=" & mypagesize & "'>" & pad & counter & "</a>"

JAg har alltså inte lagt till nåt i denna kodsnutten efter att jag implementerat funktionen för sökning via obokad vecka. Måste jag göra det? Hur i så fall?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Du måste väl skicka med veckonumret också.

MattiasMedlem sedan mars 2000205 inlägg
#7

Du menar i länkkoden till delsidorna? Jag misstänkte att jag var tvungen att göra det och har provat olika kombinationer på hur jag ska lägga in Vecka i koden, men lyckas inte alls få sökningen att fungera.

Har bl.a testat det här (har bara lagt in: "&Vecka&"=False):

   ref="<a href='" & scriptname & "?rum="&rum&"&mibaddar=
"&mibaddar&"&mabaddar="&mabaddar&"&ahav="&ahav&"&golf="
&golf&"&omrade="&omrade&""&Vecka&"=False&whichpage=" & counter
   ref=ref & "&pagesize=" & mypagesize & "'>" & pad & counter & "</a>"

Variabeln för vecka heter alltså "Vecka" och jag får ju svar när jag utför själva sökningen på bestämd vecka, så SQL-satsen verkar fungera. Det är alltså bara när jag klickar på länken till en av delsidorna som ett felmeddelandet kommer upp. Men när jag försöker lägga till Vecka där (dvs i koden ovan), så fungerar alltså inte sökningen alls.

LarsGMedlem sedan dec. 200012 464 inlägg
#8
ref="<a href='" & scriptname & "?rum="&rum&"&mibaddar=
"&mibaddar&"&mabaddar="&mabaddar&"&ahav="&ahav&"&golf="
&golf&"&omrade="&omrade& "&Vecka=" &vecka & " &whichpage=" & counter
   ref=ref & "&pagesize=" & mypagesize & "'>" & pad & counter & "</a>"

och så får du använda

strWeekField = request.querystring("vecka")
strSQL = "SELECT * FROM Tabellen WHERE " & strWeekField & " = False"

eller ?

MattiasMedlem sedan mars 2000205 inlägg
#9

Nej, det fungerar tyvärr inte. Får följande felmeddelande vid klickning på en av siffrorna/länkarna till delsidorna:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Rum >= 0 AND Bäddar >= 0 AND Bäddar <= 20 AND Hav <= 100000 AND Golf <= 100000 AND = False AND Kategori='Allaomraden ''.
/svar.asp, line 90

Line 90 leder till SQL-satsen och den ser ut så här i nuläget:

IF omrade="Allaomraden" THEN
	
	IF strWeek="Allaveckor" THEN
	
		Sql = "SELECT * FROM Tabell_1 WHERE Rum >= "&rum&" AND Bäddar >= "&mibaddar&" AND
 Bäddar <= "&mabaddar&" AND Hav <= "&ahav&" AND Golf <= "&golf&" ORDER BY Nummer" 
     
   ELSE
	
		Sql = "SELECT * FROM Tabell_1 WHERE Rum >= "&rum&" AND
 Bäddar >= "&mibaddar&" AND Bäddar <= "&mabaddar&" AND
 Hav <= "&ahav&" AND Golf <= "&golf&" AND "&strWeek&" = False ORDER BY Nummer" 

	END IF
	
ELSE

	IF strWeek="Allaveckor" THEN

		Sql = "SELECT * FROM Tabell_1 WHERE Rum >= "&rum&" AND
 Bäddar >= "&mibaddar&" AND Bäddar <= "&mabaddar&" AND Hav <= "&ahav&" AND
 Golf <= "&golf&" AND Kategori='"&omrade&"' ORDER BY Nummer" 
	
	ELSE
	
		Sql = "SELECT * FROM Tabell_1 WHERE Rum >= "&rum&" AND Bäddar >= "&mibaddar&" AND
 Bäddar <= "&mabaddar&" AND Hav <= "&ahav&" AND Golf <= "&golf&" AND "&strWeek&" = False 
AND Kategori='"&omrade&"' ORDER BY Nummer"

	END IF

END IF

Det skumma är ju att sökningen funkar vid första uppradningen, men vid klickning på länkarna till de objekt som hamnat på delsidor (pga många sökträffar) så blir det fel. Därför bör ju felet ligga i koden för länk till delsidor, dvs:

pad=""
scriptname=request.servervariables("script_name")
for counter=1 to maxcount
   If counter>=3 then
      pad=""
   end if
   ref="<a href='" & scriptname & "?rum="&rum&"&mibaddar="&mibaddar&"&mabaddar=
"&mabaddar&"&ahav="&ahav&"&golf="&golf&"&omrade=
"&omrade&" &Vecka=" &vecka & "  &whichpage=" & counter
   ref=ref & "&pagesize=" & mypagesize & "'>" & pad & counter & "</a>"
   response.write ref  &  " "
   If counter=27 then
	response.write "<br>"
   end if	
   If counter=51 then
	response.write "<br>"
   end if	 
  
next

Där det står &Vecka=" &vecka &" har jag bytt ut till &strWeek=" &strWeek & " eftersom jag ändrat variabelnamn från Vecka till strWeek (som även kan urskiljas i SQL-satsen ovan).

133 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)