strSQLStudents = "Select * from tbl_Students" if lcase(Request.Form("req_City")) <> "alle" then strSQLStudents = strSQLStudents & " where tbl_StudentCity ='" & Request.Form("req_City") & "'" end if
Du er nok nød til at uddybe lidt. Jeg kan ikke gennemskue hvad du mener med at en by kan være Alle og at der kan være flere af dem. Vær meget specifik i dine krav til hvad der skal ske og på hvilket grundlag - så er det lettere at hjælpe dig :)
Men hvis du mener at der er flere felter som udgør kriterier for dit opslag, så er det bare et spørgsmål om at lave flere betingelser under opbygningen af din SQL. Du skal så lige holde styr på om der overhovedet er nogle betingelser (for at kunne vide om WHERE skal med eller ej).
strSQLWhere = "" strSQLStudents = "Select * from tbl_Students" if lcase(Request.Form("req_City")) <> "alle" then strSQLWhere = strSQLWhere & " tbl_StudentCity ='" & Request.Form("req_City") & "'" end if if lcase(Request.Form("req_Bynavn")) <> "alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt ' (hvis det er enten eller, så benyttes OR i stedet for AND) strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentBynavn ='" & Request.Form("req_Bynavn") & "'" end if
' Hvis der var nogle kriterier, så læg dem til den grundlæggende SQL-sætning if len(strSQLWhere) > 0 then strSQLStudents = strSQLStudents & strSQLWhere end if
strSQLWhere = "" strSQLStudents = "Select * from tbl_Students"
if Request.Form("req_City") <> "Alle" then strSQLWhere = strSQLWhere & " tbl_StudentCity ='" & Request.Form("req_City") & "'" end if
if Request.Form("req_City") <> "Alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt ' (hvis det er enten eller, så benyttes OR i stedet for AND) strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentCity ='" & Request.Form("req_City") & "'" end if
if Request.Form("req_ZipCode") <> "Alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt ' (hvis det er enten eller, så benyttes OR i stedet for AND) strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentZipCode ='" & Request.Form("req_ZipCode") & "'" end if
if Request.Form("req_Grade") <> "Alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt ' (hvis det er enten eller, så benyttes OR i stedet for AND) strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentsClassGrade ='" & Request.Form("req_Grade") & "'" end if
' Hvis der var nogle kriterier, så læg dem til den grundlæggende SQL-sætning if len(strSQLWhere) > 0 then strSQLStudents = strSQLStudents & " WHERE " & strSQLWhere end if
Set rsStudents = Conn.Execute(strSQLStudents)
FEJL: Fejltype: (0x80020009) Undtagelse opstod. /students.asp, line 137
Du har kriteriet for req_City med to gange i din SQL-sætning.
Ret koden til dette:
<%
strSQLWhere = "" strSQLStudents = "Select * from tbl_Students"
if Request.Form("req_City") <> "Alle" then strSQLWhere = " tbl_StudentCity ='" & Request.Form("req_City") & "'" end if
if Request.Form("req_ZipCode") <> "Alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentZipCode ='" & Request.Form("req_ZipCode") & "'" end if
if Request.Form("req_Grade") <> "Alle" then if len(strSQLWhere) > 0 then ' Angiv at alle kriterier skal være opfyldt strSQLWhere = strSQLWhere & " AND " end if strSQLWhere = strSQLWhere & " tbl_StudentsClassGrade ='" & Request.Form("req_Grade") & "'" end if
' Hvis der var nogle kriterier, så læg dem til den grundlæggende SQL-sætning if len(strSQLWhere) > 0 then strSQLStudents = strSQLStudents & " WHERE " & strSQLWhere end if
Det er altid en god idé at undersøge om den handling man skal igang med er mulig INDEN man udfører den - det sparer oftest resurser ifht. at fejlhåndtere sig ud af situationen.
Derfor bør du udføre et check på om rs.eof = true inden du begynder at læse resultatet.
<%
' OPBYGNINGEN AF SQL-SÆTNINGEN ER GIVET SOM OVENFOR
Set rsStudents = Conn.Execute(strSQLStudents)
if not rs.eof then do while not rs.eof ' ' GØR HVAD DER SKAL GØRES MED UDTRÆKKET... ' rs.movenext loop else Response.Write "Der var ingen resultater af forespørgslen." end if
...og så lige en version som bruger de rigtige variabelnavne og rydder ordentlig op efter sig:
Set rsStudents = Conn.Execute(strSQLStudents)
if not rsStudents.eof then do while not rsStudents.eof ' ' GØR HVAD DER SKAL GØRES MED UDTRÆKKET... ' rsStudents.movenext loop else Response.Write "Der var ingen resultater af forespørgslen." end if
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.