Avatar billede jetkat Nybegynder
29. juni 2003 - 01:38 Der er 4 kommentarer og
1 løsning

Søg på flere ord

Jeg KAN altså ikke få det til at funke...jeg vil kunne finde "Grim langbenet hund" hvis jeg søger på "Grim hund".

Min kode:

<%
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database/hovedmenu.mdb")
Set myCon = Server.CreateObject("ADODB.Connection")
myCon.Open strDSN

mode=Request("mode")
If mode="submit" Then

newstring = Request.Form("T1")

if len(newstring) = 0 Then
Response.Clear
Response.Redirect("forside.asp")

Else

newstring = Replace(newstring,"'","''")

End if

newsplit = split(newstring)

for i = lbound(newsplit) to ubound(newsplit)
SQL = "SELECT * FROM Produkter WHERE 'T1' LIKE '%" & newsplit(i) & "%'"
strSQL = strSQL & " OR (Varenr LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Varenavn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Varebeskrivelse LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Detaljemenu LIKE '%" & strKeyword & "%')"

next

Set rs = mycon.Execute(SQL)

If not (rs.BOF or rs.EOF) Then

Do while not rs.EOF

Varenr = rs("Varenr")
Varenavn = rs("Varenavn")
Varebeskrivelse = rs("Varebeskrivelse")
Detaljemenu = rs("Detaljemenu")

Response.Write "<li>" & Varenavn & "</li>"

rs.movenext
loop

Else
Response.write "Desværre!"
End if

End if
%>


Giver mig følgende resultater:
Desværre! - hvis jeg søger på alt andet end T, 1 eller T1
Alle varer - hvis jeg søger på T, 1 eller T1

Min form som ligger i en anden ASP-fil ser således ud:
<form method="post" target="prodframe" action="searchprod.asp?mode=submit"><p align="center"><input type="text" value="Søg produkt" onclick="this.value=''" name="T1" size="11" style="font-family: Verdana; font-size: 10 pt; font-weight: bold"><input type="submit" value="Søg" name="B1" size="10" style="font-family: Verdana; font-size: 9 pt; color: #000000"></p></form>
Avatar billede eagleeye Praktikant
29. juni 2003 - 01:48 #1
Du over skriver din SQL for hver søge i inde i for loopet ...:

for i = lbound(newsplit) to ubound(newsplit)
SQL = "SELECT * FROM Produkter WHERE 'T1' LIKE '%" & newsplit(i) & "%'"
strSQL = strSQL & " OR (Varenr LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Varenavn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Varebeskrivelse LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Detaljemenu LIKE '%" & strKeyword & "%')"

next



Hvilke felter skal du søge på du angiver en masse men eksvis strKeyword variablen findes ikke i den kode du har vist. Fjern de ting som ikke bruges for man kan overskue det.



Prøv med dette styk kode:

SQL = "SELECT * FROM Produkter
SQLwhere = "("
for i = lbound(newsplit) to ubound(newsplit)
  if SQLwhere <> "(" then SQLwhere = SQLwhere & ") AND ("
  SQLwhere = SQLwhere & "'T1' LIKE '%" & newsplit(i) & "%'"
  SQLwhere = SQLwhere & " OR (Varenr LIKE '%" & strKeyword & "%')"
  SQLwhere = SQLwhere & " OR (Varenavn LIKE '%" & strKeyword & "%')"
  SQLwhere = SQLwhere & " OR (Varebeskrivelse LIKE '%" & strKeyword & "%')"
  SQLwhere = SQLwhere & " OR (Detaljemenu LIKE '%" & strKeyword & "%')"
next
if SQLwhere <> "(" then SQLwhere = SQLwhere & ")"

if SQLwhere <> "(" then SQL = SQL & " WHERE " & SQLwhere
Avatar billede eagleeye Praktikant
29. juni 2003 - 01:52 #2
hmm der skal ikke ' omkring T1 når det en kolonne.
Avatar billede jetkat Nybegynder
29. juni 2003 - 10:25 #3
Har nu prøvet nedenstående med følgende resultat: Et tomt søgefelt smider mig korrekt til forside.asp
Uanset hvad jeg søger på ellers listes alle mine varer (både varenr og varenavn). Også hvis jeg søger på flere ord ad gangen.

<%
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database/hovedmenu.mdb")
Set myCon = Server.CreateObject("ADODB.Connection")
myCon.Open strDSN

mode=Request("mode")
If mode="submit" Then

newstring = Request.Form("T1")

if len(newstring) = 0 Then
Response.Clear
Response.Redirect("forside.asp")

Else

newstring = Replace(newstring,"'","''")

End if

newsplit = split(newstring)

SQL = "SELECT * FROM Produkter"
SQLwhere = "("
for i = lbound(newsplit) to ubound(newsplit)
  if SQLwhere <> "(" then SQLwhere = SQLwhere & ") AND ("
  SQLwhere = SQLwhere & "Varenr LIKE '%" & newsplit(i) & "%'"
  SQLwhere = SQLwhere & " OR (Varenavn LIKE '%" & strKeyword & "%')"
next
if SQLwhere <> "(" then SQLwhere = SQLwhere & ")"

if SQLwhere <> "(" then SQL = SQL & " WHERE " & SQLwhere

Set rs = mycon.Execute(SQL)

If not (rs.BOF or rs.EOF) Then

Do while not rs.EOF

Response.Write rs("Varenr")
Response.Write rs("Varenavn")
Response.Write "<br>"

rs.movenext
loop

Else
Response.write "Desværre!"
End if

End if
%>
Avatar billede eagleeye Praktikant
29. juni 2003 - 10:33 #4
Prøv at rette strKeyword i denne linje, til arrayet:
SQLwhere = SQLwhere & " OR (Varenavn LIKE '%" & strKeyword & "%')"

Sådan her, da LIKE '%%' vist giver samtlige records.:

SQLwhere = SQLwhere & " OR (Varenavn LIKE '%" & newsplit(i) & "%')"
Avatar billede jetkat Nybegynder
29. juni 2003 - 10:46 #5
Tjah, sådan skal den altså bare kringles, tusind tak Eagleeye.
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