Avatar billede jan2001 Nybegynder
01. november 2002 - 12:43 Der er 6 kommentarer og
1 løsning

Script vil ikke som jeg vil

Hvad er årsagen til, at dette skript ikke vil søge på to eller flere usammenhængende ord?


<%
Dim cnnSearch
Dim linkRec
Dim strDBPath

Dim strSQL
Dim strSearch

strSearch = Request.QueryString("search")
%>
<body bgcolor="#FFFFFF" text="#000000" topmargin="0" leftmargin="0" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">
<form action="db_search.asp" method="get">
  <div align="center">
    <input name="search" value="<%= strSearch %>" />
    <input type="submit" value="S&oslash;g" />
  </div>
</form>
<%
If strSearch <> "" Then

    strDBPath = Server.MapPath("database/database.mdb")



    Set cnnSearch = Server.CreateObject("ADODB.Connection")


    cnnSearch.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & ";"

sstring = split(strSearch)    

for i = lbound(sstring) to ubound(sstring)
    strSQL = "SELECT * " _
        & "FROM links " _
        & "WHERE title LIKE '%" & sstring(i) & Replace(strSearch, "'", "''") & "%' " _
        & "OR description LIKE '%" & Replace(strSearch, "'", "''") & "%' " _
                & "ORDER BY title;"
next
    Set linkRec = cnnSearch.Execute(strSQL)

    Do while NOT linkRec.EOF

Set catsRec = cnnSearch.Execute ("SELECT * FROM cats where catid = " & linkrec("catid") & "")
            %>

</font>
<!-- #INCLUDE file="linktemp.asp"--><%
            linkrec.MoveNext
        loop

    %>
    </table>
    <%

set catsRec = nothing
Set linkRec = Nothing
cnnSearch.Close
Set cnnSearch = Nothing

End If
%>
Avatar billede eagleeye Praktikant
01. november 2002 - 12:47 #1
Hvordan skiller du dine søgeord fra hinanden ???
Normalt spliter man og angiver hvilken karakter som splitter ord eksvis " " mellemrum eller "," for komma:

sstring = split(strSearch," ")
Avatar billede eagleeye Praktikant
01. november 2002 - 12:52 #2
men du skal også kun havde WHERE delen inde i for løkken ikke ikke SELECT du søger kun på sidste ord fordi du i for løkken overskriver strSQL...

det skal laves om til noget i stil med:


strSQL = "SELECT * " _
        & "FROM links " _
        & "WHERE "

for i = lbound(sstring) to ubound(sstring)
  if strWHERE <> "" then strWHERE = strWHERE & " OR "
  strWHERE = strWHERE & " title LIKE '%" & sstring(i) & "%' " _
  & " OR description LIKE '%" & sstring(i) & "%' " _
next

strSQL = strSQL & strWHERE & " ORDER BY title;"
Avatar billede eagleeye Praktikant
01. november 2002 - 13:03 #3
det ville være en god ide at prøve at udskrive SQL sætningne ¨når den er opbytter for at se en ser rigtigt ud efter den er lavet:

strSQL = strSQL & strWHERE & " ORDER BY title;"

Response.write strSQL
Response.End

Når SQL sætningen ser OK ud kan du slippe den løs på databasen.
Avatar billede jan2001 Nybegynder
01. november 2002 - 13:58 #4
Har prøvet ovenstående, men virker ikke. Jeg lader den nu udskrive SQL sætningerne, og ved søg på test og client med mellemrum ser den sådan ud:

SELECT * FROM links WHERE title LIKE '%clienttest client%' OR description LIKE '%test client%' ORDER BY title;

Hvordan skal den se ud, hvos den skal være rigtig?
Avatar billede jan2001 Nybegynder
01. november 2002 - 15:01 #5
Min kode ser nu sådan ud:

If strSearch <> "" Then

    strDBPath = Server.MapPath("database/database.mdb")



    Set cnnSearch = Server.CreateObject("ADODB.Connection")


    cnnSearch.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & ";"

sstring = split(strSearch," ")    

strSQL = "SELECT * " _
        & "FROM links " _
        & "WHERE "

for i = lbound(sstring) to ubound(sstring)
  if strWHERE <> "" then strWHERE = strWHERE & " OR "
  strWHERE = strWHERE & " title LIKE '%" & sstring(i) & "%' " _
  & " OR description LIKE '%" & sstring(i) & "%' " _
next

strSQL1 = strSQL & strWHERE & " ORDER BY title;"

    Set linkRec = cnnSearch.Execute(strSQL1)
Response.write strSQL1
Response.End


Den giver mig en fejlmeddelelse: Slut på sætning var ventet linie 40 Next
Avatar billede eagleeye Praktikant
01. november 2002 - 16:29 #6
der er et _ for meget i sidste linie i for løkken:

for i = lbound(sstring) to ubound(sstring)
  if strWHERE <> "" then strWHERE = strWHERE & " OR "
  strWHERE = strWHERE & " title LIKE '%" & sstring(i) & "%' " _
  & " OR description LIKE '%" & sstring(i) & "%' "
next
Avatar billede jan2001 Nybegynder
04. november 2002 - 14:36 #7
tak for hjælpen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester