Jeg regnede også med at det ville blive til flere SQL-sætninger ;-)
Mener du således?:
<% If Request.Form("avanceret") = "1" Then ' # DEN EKSAKTE FRASE strSoegeord = Split(strSoegeord," ") For i = LBound(strSoegeord) To UBound(strSoegeord) strSQL = "SELECT * FROM artikler WHERE " strSQL = strSQL & " (Titel 1 LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang 1 LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold 1 LIKE '%" & strSoegeord(i) & "%')" Next ElseIf Request.Form("avanceret") = "2" Then ' # ALLE ORDENE strSoegeord = Split(strSoegeord," ") For i = LBound(strSoegeord) To UBound(strSoegeord) strSQL = "SELECT * FROM artikler WHERE " strSQL = strSQL & " (Titel n LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Blikfang n LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Indhold n LIKE '%" & strSoegeord(i) & "%')" Next Else ' # MINDST ÉT AF ORDENE strSoegeord = Split(strSoegeord," ") For i = LBound(strSoegeord) To UBound(strSoegeord) strSQL = "SELECT * FROM artikler WHERE " strSQL = strSQL & " (Titel n LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang n LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold n LIKE '%" & strSoegeord(i) & "%')" Next End If %> (Note: Jeg har ændret strTekst til strSoegeord)
<% If Request.Form("avanceret") = "1" Then ' # DEN EKSAKTE FRASE strSQL = "SELECT * FROM artikler WHERE " strSQL = strSQL & " (Titel LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord & "%')" ElseIf Request.Form("avanceret") = "2" Then ' # ALLE ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) strSQL = strSQL & " (Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Indhold LIKE '%" & strSoegeord(i) & "%')" Next Else ' # MINDST ÉT AF ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) strSQL = strSQL & " (Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord(i) & "%')" Next End If %>
ElseIf Request.Form("avanceret") = "2" Then ' # ALLE ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next Else ' # MINDST ÉT AF ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next End If
Så har jeg kigget på det, men jeg kæmper med følgende fejl:
Microsoft VBScript runtime error '800a000d' Type mismatch /Soeg.asp, line 237
Det virker tilsyneladende som det skal, når jeg fjerner følgende:
<% ' # TÆLLER ANTAL FUNDNE RESULTATER Set rs2 = myConn.Execute("SELECT COUNT(*) AS Resultater_Count FROM artikler WHERE (Titel LIKE '%" & strSoegeord & "%' OR Blikfang LIKE '%" & strSoegeord & "%' OR Indhold LIKE '%" & strSoegeord & "%')") If rs2("Resultater_Count") = 1 Then strResultater = "resultat." ElseIf rs2("Resultater_Count") > 1 Then strResultater = "resultater." Else strResultater = "resultater." End if %>
Ovenstående har virket hidtil, men skaber åbenbart en konflikt når jeg bruger de nye SQL-sætninger. Kan du se hvor fejlen er/hvad der skal rettes?
Set rs2 = myConn.Execute("SELECT COUNT(*) AS Resultater_Count FROM artikler WHERE (Titel LIKE '%" & strSoegeord & "%' OR Blikfang LIKE '%" & strSoegeord & "%' OR Indhold LIKE '%" & strSoegeord & "%')")
If Request.QueryString ("Side") = "" Then Response.Redirect "Soeg.asp?Soegeord=" & strSoegeord & "&Side=1" End If
' If Len(strSoegeord) = 0 Then ' # HVIS DER IKKE ER SKREVET I FELTET ' Response.Clear ' Response.Redirect("Soeg.asp") ' Else ' # HVIS DER ER SKREVET I FELTET ' strSoegeord = Replace(strSoegeord,"'","''") ' End If
' # SKABER DNSLESS FORBINDELSE TIL DATABASEN strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\www\db\artikler.mdb" Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' # INDSÆTTER PAGING-FUNKTION intPage = Request("Side") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
' # ÅBNER RECORDSETTET Set rs = Server.CreateObject("ADODB.RecordSet")
strAvanceret = Request.Form("avanceret") If strAvanceret = "1" Then ' # SØGER PÅ DEN EKSAKTE FRASE strSQL = "SELECT * FROM artikler WHERE " strSQL = strSQL & " (Titel LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord & "%')" ElseIf strAvanceret = "2" Then ' # SØGER PÅ ALLE ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next Else ' # SØGER PÅ MINDST ÉT AF ORDENE strSoegeord = Split(strSoegeord," ") strSQL = "SELECT * FROM artikler WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next End If
' # TÆLLER ANTAL FUNDNE RESULTATER Set rs2 = myConn.Execute("SELECT COUNT(*) AS Resultater_Count FROM artikler WHERE (Titel LIKE '%" & strSoegeord & "%' OR Blikfang LIKE '%" & strSoegeord & "%' OR Indhold LIKE '%" & strSoegeord & "%')") If rs2("Resultater_Count") = 1 Then strResultater = "resultat." ElseIf rs2("Resultater_Count") > 1 Then strResultater = "resultater." Else strResultater = "resultater." End if
' # FORKORTER SØGETEKST, HVIS OVER 25 TEGN If Len(Request.QueryString("Soegeord")) <= 25 Then strSoegeord2 = Request.QueryString("Soegeord") Else strSoegeord2 = Left(Request.QueryString("Soegeord"),25) & "..." End If %>
If Request.QueryString ("Side") = "" Then Response.Redirect "Soeg.asp?Soegeord=" & strSoegeord & "&Side=1" End If
' If Len(strSoegeord) = 0 Then ' # HVIS DER IKKE ER SKREVET I FELTET ' Response.Clear ' Response.Redirect("Soeg.asp") ' Else ' # HVIS DER ER SKREVET I FELTET ' strSoegeord = Replace(strSoegeord,"'","''") ' End If
' # SKABER DNSLESS FORBINDELSE TIL DATABASEN strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\www\db\artikler.mdb" Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN
' # INDSÆTTER PAGING-FUNKTION intPage = Request("Side") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
' # ÅBNER RECORDSETTET Set rs = Server.CreateObject("ADODB.RecordSet")
strAvanceret = Request.Form("avanceret") If strAvanceret = "1" Then ' # SØGER PÅ DEN EKSAKTE FRASE strSQL = " WHERE " strSQL = strSQL & " (Titel LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord & "%')" ElseIf strAvanceret = "2" Then ' # SØGER PÅ ALLE ORDENE strSoegeord = Split(strSoegeord," ") strSQL = " WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " AND (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next Else ' # SØGER PÅ MINDST ÉT AF ORDENE strSoegeord = Split(strSoegeord," ") strSQL = " WHERE " For i = LBound(strSoegeord) To UBound(strSoegeord) If i > LBound(strSoegeord) Then strSQL = strSQL & " OR " End If strSQL = strSQL & " ((Titel LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Blikfang LIKE '%" & strSoegeord(i) & "%')" strSQL = strSQL & " OR (Indhold LIKE '%" & strSoegeord(i) & "%'))" Next End If strSQLstar = "SELECT * FROM artikler" & strSQL
' # TÆLLER ANTAL FUNDNE RESULTATER strSQLcount = "SELECT COUNT(*) AS Resultater_Count FROM artikler" & strSQL Set rs2 = myConn.Execute(strSQLcount) If rs2("Resultater_Count") = 1 Then strResultater = "resultat." ElseIf rs2("Resultater_Count") > 1 Then strResultater = "resultater." Else strResultater = "resultater." End if
' # FORKORTER SØGETEKST, HVIS OVER 25 TEGN If Len(Request.QueryString("Soegeord")) <= 25 Then strSoegeord2 = Request.QueryString("Soegeord") Else strSoegeord2 = Left(Request.QueryString("Soegeord"),25) & "..." End If %>
ADODB.Recordset error '800a0bb9' Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. /Soeg.asp, line 323
Jeg har lige endnu et prob; Jeg får en fejlmeddelelse når jeg søger på enkelte bogstaver... Der står at søgningen resulterede i 5 resultater (på f.eks. bogstavet 'h'), men der hvor artiklerne skal vises får jeg følgende fejl:
Microsoft VBScript runtime error '800a000d' Type mismatch /Soeg.asp, line 402
Nu var det i selve formularen jeg havde problemet ;-)
Tilsyneladende fandt jeg selv en måde at løse problemet på, og det ser ud til at fungere efter hensigten.
Arne, jeg siger mange tak for din tid og hjælp (og ikke mindst din tålmodighed!). Der er points på vej i din retning :-)
// Lukker
Apo
Synes godt om
Ny brugerNybegynder
Din løsning...
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.