Avatar billede tjaz Nybegynder
21. august 2001 - 20:39 Der er 15 kommentarer og
1 løsning

Søgefunktion?

jeg har lavet en søgefunktion men den søger kun på det som man skriver og ikke på alle karaterne i søgningen

dvs hvis man søger på fx

hund og kat

søger den på det man skriver og ikke både hund, og, og kat. Hvordan gør jeg så den søger på alle 3 ord?

Min sql ser sådan her ud:

SQL = \"select * from soeg where ((bruger like \'%\" & Request.Form(\"soeg\") & \"%\') or (beskrivelse like \'%\" & Request.Form(\"soeg\") & \"%\'))

ORDER by attraktion\"

Håber i kan hjælpe mig!

/TjaZ
Avatar billede nordclc Nybegynder
21. august 2001 - 21:24 #1
Forslag, ikke testet!
----------------------------------------

\' Definer array variabel
Dim arrOrd

\' Lav et array ved at splitte soeg ved mellemrum
arrOrd = Split(Request.Form(\"soeg\"),\" \")

\' SQL statement
strSQL = \"select * from soeg where \"

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \"((bruger like \'%\" & arrOrd(t) & \"%\') or (beskrivelse like \'%\" & aarOrd(t) & \"%))\"
  if t < UBound(arrOrd) then
    strSQL = strSQL & \" or \"
  end if
Next

\' Tilføj order by
strSQL = strSQL & \" ORDER by attraktion\"
----------------------------------------
// Claus
Avatar billede nordclc Nybegynder
21. august 2001 - 21:27 #2
Rettelser - hmm:

\' Gennemløb array og dan where clauses

strSQL = strSQL & \"((bruger like \'%\" & arrOrd(t) & \"%\') or (beskrivelse like \'%\" & aarOrd(t) & \"%\'))\"
Avatar billede ldanielsen Nybegynder
21. august 2001 - 21:43 #3
\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or bruger like \'%\" & arrOrd(t) & \"%\') or beskrivelse like \'%\" & aarOrd(t) & \"%\"
Next

strSQL = Replace(strSQL, \" or \", \" \", 1, 1)

Jeg dropper alle parenteser, og vælger at starte med \" or \", og derefter fjerne det førest \" or \"

ALT skal findes, derfor ingen parenteser
Avatar billede tjaz Nybegynder
21. august 2001 - 22:03 #4
nordclc > Den siger:

Microsoft VBScript runtime error \'800a000d\'

Type mismatch: \'aarOrd\'

når jeg bruger dit forslag.. har taget højde for den rettelse du har lavet :\'(
Avatar billede ldanielsen Nybegynder
21. august 2001 - 22:09 #5
Gør den også det hvis du bruger min, og sørger for at der er et mellemrum i søgeteksten?

Vi kan gardere os mod det andet bagefter
Avatar billede ldanielsen Nybegynder
21. august 2001 - 22:18 #6
Næ, vi behøver ikke gardere os, den vil også virke hvis der ingen mellemrum er

Jeg manglede vist en lille pling til sidst, og havde en parentes for meget, undskyld:

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or bruger like \'%\" & arrOrd(t) & \"%\' or beskrivelse like \'%\" & aarOrd(t) & \"%\'\"

strSQL = Replace(strSQL, \" or \", \" \", 1, 1)
Avatar billede tjaz Nybegynder
21. august 2001 - 22:21 #7
giver stadig samme fejl :(
Avatar billede tjaz Nybegynder
21. august 2001 - 22:25 #8
Det hele ser nu sådan ud:

<%
If Request.Form(\"soeg\") <> \"\" then

    Set DB = Server.CreateObject(\"ADODB.Connection\")
    DBSti = \"DBQ=\" & Server.Mappath(\"../db/attraktioner.mdb\")
    DB.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; \" & DBSti

\' Definer array variabel
Dim arrOrd

\' Lav et array ved at splitte soeg ved mellemrum
arrOrd = Split(Request.Form(\"soeg\"),\" \")

\' SQL statement
strSQL = \"select * from soeg where \"

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or attraktion like \'%\" & arrOrd(t) & \"%\' or korttekst like \'%\" & aarOrd(t) & \"%\'\"
strSQL = Replace(strSQL, \" or \", \" \", 1, 1)
  if t < UBound(arrOrd) then
    strSQL = strSQL & \" or \"
  end if
Next

\' Tilføj order by
strSQL = strSQL & \" ORDER by attraktion\"


    Set rs = db.Execute (SQL)
    If not rs.eof then
    do until rs.eof
%>

jeg har rette nogle af mine tabeller i db det er derfor du vil se at det er noget andet der står i min sql end tidligere.
Avatar billede ldanielsen Nybegynder
21. august 2001 - 22:35 #9
Det lader til at den ikke kan lide det array!?

Request.Form(\"soeg\") må ikke være tom!

Find lige ud af hvor den fejler

Prøv at sige
Response.Write (Ubound(arrOrd))
Response.End

lige efter Split-linien
Avatar billede tjaz Nybegynder
21. august 2001 - 22:39 #10
så skriver den 1???
Avatar billede tjaz Nybegynder
21. august 2001 - 22:43 #11
og hvis jeg søger på et enkelt ord skriver den 0 og søger jeg på 3 ord skriver den 2 dvs den tæller de mellemrum jeg har lavet???
Avatar billede ldanielsen Nybegynder
21. august 2001 - 22:52 #12
Den tæller hvor mange poster der er i array\'et (minus en, da første post er nummer 0).

Hvilken linie kommer fejlen så i?


Avatar billede ldanielsen Nybegynder
21. august 2001 - 22:55 #13
Hej, du blander vore løsninger:

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or attraktion like \'%\" & arrOrd(t) & \"%\' or korttekst like \'%\" & aarOrd(t) & \"%\'\"
strSQL = Replace(strSQL, \" or \", \" \", 1, 1)
  if t < UBound(arrOrd) then
    strSQL = strSQL & \" or \"
  end if
Next

skal være

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or attraktion like \'%\" & arrOrd(t) & \"%\' or korttekst like \'%\" & aarOrd(t) & \"%\'\"
Next

strSQL = Replace(strSQL, \" or \", \" \", 1, 1)
 
Avatar billede tjaz Nybegynder
21. august 2001 - 23:03 #14
DVS den skal hedde:

<%
If Request.Form(\"soeg\") <> \"\" then

    Set DB = Server.CreateObject(\"ADODB.Connection\")
    DBSti = \"DBQ=\" & Server.Mappath(\"../db/attraktioner.mdb\")
    DB.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; \" & DBSti

\' Definer array variabel
Dim arrOrd

\' Lav et array ved at splitte soeg ved mellemrum
arrOrd = Split(Request.Form(\"soeg\"),\" \")

\' SQL statement
strSQL = \"select * from soeg where \"

\' Gennemløb array og where clauses
For t = LBound(arrOrd) to UBound(arrOrd)
  strSQL = strSQL & \" or attraktion like \'%\" & arrOrd(t) & \"%\' or korttekst like \'%\" & aarOrd(t) & \"%\'\"
Next

strSQL = Replace(strSQL, \" or \", \" \", 1, 1)

\' Tilføj order by
strSQL = strSQL & \" ORDER by attraktion\"


    Set rs = db.Execute (SQL)
    If not rs.eof then
    do until rs.eof
%>

Sorry, men jeg har ikke prøvet at arbejde med array før.
Avatar billede tjaz Nybegynder
30. august 2001 - 21:58 #15
Nå der var ikke nogen som kunne hjælpe mig så det virkede .. sorry.
Avatar billede ldanielsen Nybegynder
31. august 2001 - 14:49 #16
Nå, du kunne altså ikke findu ud af vore svar, og få dem indarbejdet i din side så det virkede, sorry

ASP er ikke så nemt, så det er bare med at klø på
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