24. juli 2003 - 00:13Der er
37 kommentarer og 1 løsning
flere søgemuligheder
Hej
Jeg har den her søge side: ******************************************************** <html>
<head>
<title>Fritekst søgning</title> </head>
<body>
<form method="POST" action="search.asp"> <p><input type="text" name="Keyword" size="20">Fritekst søgning<br> <input type="submit" value="Søg" name="Action"></p> </form> </body> </html> ******************************************************** Som kalder den her side: <% Response.Buffer = True %> <html><head> <title>Søgeresultat</title> </head><body>
<% ' Henter værdien fra soeg.htm strKeyword = Trim(Request.Form("Keyword"))
If Len(strKeyword) = 0 Then ' Hvis der ikke er skrevet i feltet Response.Clear Response.Redirect("search.htm") Else ' Hvis der er skrevet i feltet strKeyword = Replace(strKeyword,"'","''") End If
' Opbygger en dynamisk SQL streng strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder WHERE" strSQL = strSQL & " (Navn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Adresse LIKE '%" & strKeyword & "%')" ' strSQL = strSQL & " OR Dato LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Bynavn LIKE '%" & strKeyword & "%')" strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search_2000.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" 'Her ændre jeg senere udsendet på visningen ved border Response.Write "<table border=1>" ' Overskriften vær opmærksom på at den rykker sig hvis feltet er tomt ser på det senere Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th><th>Dato</th></tr>" Do While Not rs.EOF ' <td width="25" valign="top"> <font face="Tahoma" size="2"><b><a target="_blank" href="<%=rs("Hjemmeside")%>"><img border="0" src="../images/skilt.gif" width="26" ' height="21" alt="Link til kommune"></a></b></font> ' </td> Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Dato") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter mig myConn.Close Set myConn = Nothing %>
</body></html> ********************************************************* Nu vil jeg gerne have nogle flere søge muligheder, hvor der først søges på Dato, derefter navn og så fritekst søgning. Så jeg tilføjer 2 nye felter på min søge side: ********************************************************* <p><input type="text" name="Dato" size="20">Dato<br> <p><input type="text" name="Navn" size="20">Navn<br> ********************************************************* Nemlig Dato og navn - det jeg har brug for er en der vil hjælpe mig med at tirette asp siden.......
dato = Replace(Trim(Request.Form("dato")),"'","") navn = Replace(Trim(Request.Form("navn")),"'","''") strKeyword = Replace(Trim(Request.Form("Keyword")),"'","''")
sqlWHERE = "" if strKeyword <> "" then sqlWHERE = sqlWHERE "(" sqlWHERE = sqlWHERE & "(Adresse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Bynavn LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & ")" end if if dato <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(dato = #" & dato & "#)" end if if navn <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(navn = '" & navn & "')" end if
strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder" if sqlWHERE <> "" then strSQL = strSQL & " " & sqlWHERE
Så kan du prøve at udskrive SQL for at se om det er sådan du ønsker den skal se ud:
<% Response.Buffer = True Session.LCID=1030 'Dansk dato format %> <html><head> <title>Søgeresultat</title> </head><body>
<% ' Henter værdien fra soeg.htm dato = Replace(Trim(Request.Form("dato")),"'","") navn = Replace(Trim(Request.Form("navn")),"'","''") strKeyword = Replace(Trim(Request.Form("Keyword")),"'","''")
if dato <> "" then dato = Year(dato) & "-" & Month(dato) & "-" & Day(dato) end if
sqlWHERE = "" if strKeyword <> "" then sqlWHERE = sqlWHERE "(" sqlWHERE = sqlWHERE & "(Adresse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Bynavn LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & ")" end if if dato <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(dato = #" & dato & "#)" end if if navn <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(navn = '" & navn & "')" end if
strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder" if sqlWHERE <> "" then strSQL = strSQL & " " & sqlWHERE
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search_2000.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" 'Her ændre jeg senere udsendet på visningen ved border Response.Write "<table border=1>" ' Overskriften vær opmærksom på at den rykker sig hvis feltet er tomt ser på det senere Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th><th>Dato</th></tr>" Do While Not rs.EOF ' <td width="25" valign="top"> <font face="Tahoma" size="2"><b><a target="_blank" href="<%=rs("Hjemmeside")%>"><img border="0" src="../images/skilt.gif" width="26" ' height="21" alt="Link til kommune"></a></b></font> ' </td> Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Dato") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter mig myConn.Close Set myConn = Nothing %>
Error Type: Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0401) Slut på sætning var ventet /ss/search.asp, line 20, column 20 sqlWHERE = sqlWHERE "(" -------------------^
Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause. /ss/search.asp, line 44
******************************************* Koden ser sådean her ud:
<% Response.Buffer = True Session.LCID=1030 'Dansk dato format %> <html><head> <title>Søgeresultat</title> </head><body>
<% ' Henter værdien fra soeg.htm dato = Replace(Trim(Request.Form("dato")),"'","") navn = Replace(Trim(Request.Form("navn")),"'","''") strKeyword = Replace(Trim(Request.Form("Keyword")),"'","''")
if dato <> "" then dato = Year(dato) & "-" & Month(dato) & "-" & Day(dato) end if
sqlWHERE = "" if strKeyword <> "" then sqlWHERE = sqlWHERE & "(" sqlWHERE = sqlWHERE & "(Adresse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Bynavn LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & ")" end if if dato <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(dato = #" & dato & "#)" end if if navn <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(navn = '" & navn & "')" end if
strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder" if sqlWHERE <> "" then strSQL = strSQL & " " & sqlWHERE
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search_2000.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" 'Her ændre jeg senere udsendet på visningen ved border Response.Write "<table border=1>" ' Overskriften vær opmærksom på at den rykker sig hvis feltet er tomt ser på det senere Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th><th>Dato</th></tr>" Do While Not rs.EOF
Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Dato") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter mig myConn.Close Set myConn = Nothing %>
Men jeg kan godt se at jeg skal have en fra til dato.
Kan du hjælpe med at lave det på start side evt. i form af dropdown med 3 dropdown felter en for dag en for mdr og en for år så kan bruger heller ikke skrive forkert
Her er fejlen : SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder ((Adresse LIKE '%anders%') OR (Bynavn LIKE '%anders%') OR (Beskrivelse LIKE '%anders%'))
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder ((Adresse LIKE '%and%') OR (Bynavn LIKE '%and%') OR (Beskrivelse LIKE '%and%')) AND (dato = #2003-7-23#) AND (navn = 'peter')
hov datoen jeg har skrevt i feltet ser sådan her ud 23-07-2003 (sådan står den også i databasen men den læser den åbenbart som AND (dato = #2003-7-23#) er det ikke en fejl
<form method="POST" action="search.asp"> <p><input type="text" name="Keyword" size="20">Fritekst søgning<br> <p>Fra dag <select name="fradag"> <% for i = 1 to 31 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Fra månede <select name="framaaned"> <% for i = 1 to 12 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Fra år <select name="fraaar"> <% for i = 2000 to 2015 %> <option value="<%=i%>"><%=i%></option> <% next %> </select>
<p>Til dag <select name="tildag"> <% for i = 1 to 31 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Til månede <select name="tilmaaned"> <% for i = 1 to 12 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Til år <select name="tilaar"> <% for i = 2000 to 2015 %> <option value="<%=i%>"><%=i%></option> <% next %> </select>
navn = Replace(Trim(Request.Form("navn")),"'","''") strKeyword = Replace(Trim(Request.Form("Keyword")),"'","''")
fraDato = "" tilDato = "" if isDate(fraDag&"-"&fraMaaned&"-"&fraAar) then fraDato = fraAar & "-" & fraMaaned & "-" & fraDag end if if isDate(tilDag&"-"&tilMaaned&"-"&tilAar) then tilDato = tilAar & "-" & tilMaaned & "-" & tilDag end if
sqlWHERE = "" if strKeyword <> "" then sqlWHERE = sqlWHERE & "(" sqlWHERE = sqlWHERE & "(Adresse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Bynavn LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & " OR (Beskrivelse LIKE '%" & strKeyword & "%')" sqlWHERE = sqlWHERE & ")" end if if fraDato <> "" AND tilDato <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(dato >= #" & fraDato & "# AND dato <= #" & tilDato & "#)" end if if navn <> "" then if sqlWHERE <> "" then sqlWHERE = sqlWHERE & " AND " sqlWHERE = sqlWHERE & "(navn = '" & navn & "')" end if
strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder" if sqlWHERE <> "" then strSQL = strSQL & " " & sqlWHERE
' Skaber DSNLess forbindelse til DBen strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search_2000.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' Skaber et recordset udfra SQL strengen Set rs = myConn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<p>Søgeresultat</p>" 'Her ændre jeg senere udsendet på visningen ved border Response.Write "<table border=1>" ' Overskriften vær opmærksom på at den rykker sig hvis feltet er tomt ser på det senere Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th><th>Dato</th></tr>" Do While Not rs.EOF
Response.Write "<tr><td>" & rs("Navn") & "</td>" Response.Write "<td>" & rs("Adresse") & "</td>" Response.Write "<td>" & rs("Bynavn") & "</td>" Response.Write "<td>" & rs("Dato") & "</td>" Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>" rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p>Der er ikke fundet noget på denne søgning</p>" End If
' Rydder op efter mig myConn.Close Set myConn = Nothing %>
Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause. /ss/search.asp, line 57
Browser Type: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Page: POST 105 bytes to /ss/search.asp
POST Data: Keyword=ander&fradag=23&framaaned=7&fraaar=2003&tildag=23&tilmaaned=7&tilaar=2003&Navn=peter&Action=S%F8g
SELECT ID, Navn, Adresse, Bynavn, Beskrivelse, Dato FROM Kunder ((Adresse LIKE '%ander%') OR (Bynavn LIKE '%ander%') OR (Beskrivelse LIKE '%ander%')) AND (dato >= #2003-7-23# AND dato <= #2003-7-23#) AND (navn = 'peter')
Men lige til sidst jeg skal kunne søge uafhængigt af mine felter også på dato - så værdine skal være 0 når der startes i i dato - kan dette lade sig gøre
Ja det kan det, du retter bare formen på form siden til dette: Hvis man sætter dem til en ulovlig dato udelades dato søgeningen nemlig.
<form method="POST" action="search.asp"> <p><input type="text" name="Keyword" size="20">Fritekst søgning<br> <p>Fra dag <select name="fradag"> <option value="0">Ingen</option> <% for i = 1 to 31 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Fra månede <select name="framaaned"> <option value="0">Ingen</option> <% for i = 1 to 12 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Fra år <select name="fraaar"> <option value="0">Ingen</option> <% for i = 2000 to 2015 %> <option value="<%=i%>"><%=i%></option> <% next %> </select>
<p>Til dag <select name="tildag"> <option value="0">Ingen</option> <% for i = 1 to 31 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Til månede <select name="tilmaaned"> <option value="0">Ingen</option> <% for i = 1 to 12 %> <option value="<%=i%>"><%=i%></option> <% next %> </select> Til år <select name="tilaar"> <option value="0">Ingen</option> <% for i = 2000 to 2015 %> <option value="<%=i%>"><%=i%></option> <% next %> </select>
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.