Avatar billede ndh Nybegynder
22. august 2000 - 11:20 Der er 12 kommentarer og
1 løsning

Søgemaskine, der foretage kombinerede søgninger i Access-database

Jeg har nu udarbejdet en søgemaskine i asp til en Access database. Søgefunktionaliteten i søgemaskine muliggør fritekstsøgning, samt søgninger på de forskellige felter i basen - et felt af gangen. Det er dog ikke muligt at kombinere søgningerne, f.eks. søge på Søren under FORNAVN-feltet og Hansen under EFTERNAVN-feltet samtidigt. Hvordan får jeg udvidet min søgemaskine til at kunne dette?

På nuværende tidspunkt er søgemaskine opbygget med en htm.fil hvori søgebilledet ses. Til hver søgefelt er der tilknyttet en asp-fil der så kan udføre søgningen i det enkelte felt. Herunder ses et eksempel på en af disse asp-filer:

<% Response.Buffer = true %>
<html>
<head>
<title>Resultat af søgning</title>
</head>
<body BGCOLOR=\"#003050\" TEXT=\"#E6E8FA\" VLINK=\"#FCCF03\" LINK=\"#FCCF03\" ALINK=\"#06438A\" leftmargin=\"25\">

<% Response.Buffer = true %>
<p align=\"left\">

<font size=6 color=\"#FCCF03\"><b>Resultat af søgning</b>
</font>

<font size=5 color=\"#FCCF03\">
<font size=3 color=\"#FCCF03\"><p align=\"right\"><a href=\"search.asp\">Ny søgning</a><br></p>




<%

\' strKeyword = Trim(Request.Form(\"Keyword\"))
strKeyword = Request.querystring(\"Keyword\")


If Len(strKeyword) = 0 Then

Response.Clear
    Response.Redirect(\"search.htm\")
Else
    strKeyword = Replace(strKeyword,\"\'\",\"\'\'\")
End If

intPage = Request(\"page\")
If isNumeric(intPage) = False Or intPage < 1 Then
intPage = 1
End If
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"SELECT * FROM Tabel WHERE\"
strSQL = strSQL & \" (Efternavn LIKE \'%\" & strKeyword & \"%\')\"




strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"test.mdb\")
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
rs.PageSize = 5
rs.AbsolutePage = intPage
intRecCount = rs.PageSize
intPageCount = rs.PageCount



Response.Write \"<p><b>Side \" & intPage & \" af \" & intPageCount & \"</b></p>\"
Do While Not rs.EOF And intRecCount > 0


Response.Write \"<tr><th><b><p></p>Efternavn:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Efternavn\") & \"</b></font><br>\"

Response.Write \"<tr><th><b>Fornavne:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Fornavne\") & \"</font><br>\"

Response.Write \"<tr><th><b>Fødselsdato:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Fødselsdato\") & \"</font><br>\"

Response.Write \"<tr><th><b>Fødested:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Fødested\") & \"</font><br>\"

Response.Write \"<tr><th><b>Gade/vej:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Gadevej\") & \"</font><br>\"

Response.Write \"<tr><th><b>Gade-/vejnummer:  </b></th></tr>\"
Response.Write \"<font color=#FFFFFF><b>\" & rs(\"Gadevejnummer\") & \"</font></b><br>\"


intRecCount = intRecCount - 1
rs.MoveNext
Loop
Else
Response.Write \"Der er ikke fundet nogle personer, der matcher din søgning\"
End If
rs.Close
Set rs = Nothing
Response.Write \"<p>Gå til side \"
For intNum = 1 To intPageCount

Response.Write \"<a href=search.asp?Keyword=\" & strKeyword & \"&page=\" & intNum & \">\" & intNum & \"</a> \"
Next
Response.Write \"<p>\"
If Clng(intPage) > 1 Then
Response.Write \"<a href=search.asp?Keyword=\" & strKeyword & \"&page=\" & intPage - 1 & \">&lt;&lt;</a>\"
Else
Response.Write \"&lt;&lt;\"
End If
Response.Write \"&nbsp;\"
If Clng(intPage) < Clng(intPageCount) Then
Response.Write \"<a href=search.asp?Keyword=\" & strKeyword & \"&page=\" & intPage + 1 & \">&gt;&gt;</a>\"
Else
Response.Write \"&gt;&gt;\"
End If
%>
</body></html>




Avatar billede sjensen Nybegynder
22. august 2000 - 13:12 #1
Søgning på flere felter samtidig er ganske enkelt for SQL:

strSQL = \"SELECT * FROM Tabel WHERE\"
strSQL = strSQL & \" (Fornavn LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" (Efternavn LIKE \'%\" & strKeyword1 & \"%\')\"

Det er så selvfølgeligt din opgave at udfylde strKeyword med fornavnet og strKeyword1 med efternavnet. D.v.s. ændre din side til at kunne indtaste begge dele.

Men for SQL er det let nok
Avatar billede sjensen Nybegynder
22. august 2000 - 13:13 #2
Ups: Jeg manglede lige ordet AND:

strSQL = \"SELECT * FROM Tabel WHERE\"
strSQL = strSQL & \" (Fornavn LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" AND (Efternavn LIKE \'%\" & strKeyword1 & \"%\')\"

Avatar billede ndh Nybegynder
22. august 2000 - 13:51 #3
Jeg har prøvet ovenstående men får følgende meddelelse:



ADODB.Recordset fejl \'800a0bb9\'

Programmet benytter argumenter, som er af en forkert type, er uden for det acceptable område eller er i indbyrdes konflikt.

/search1.asp, linje 58
Avatar billede sjensen Nybegynder
22. august 2000 - 14:01 #4
er \"Fornavn\" og \"Efternavn\" ikke felter i din db ?

Og hvis de er, hvilken type er de så ?
Avatar billede dines Nybegynder
22. august 2000 - 14:35 #5
I aspén star der fornavne - så det er vel dit db-felt
Avatar billede ndh Nybegynder
22. august 2000 - 14:43 #6
jo, i min db hedder felterne Efternavn og Fornavne - det er tekstfelter

Avatar billede ndh Nybegynder
22. august 2000 - 14:43 #7
Fejlen kommer stadig!
Avatar billede sjensen Nybegynder
22. august 2000 - 15:17 #8
Ok, så skulle din SQL str se sådan ud:

strSQL = \"SELECT * FROM Tabel WHERE\"
strSQL = strSQL & \" (Fornavne LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" AND (Efternavn LIKE \'%\" & strKeyword1 & \"%\')\"

men.. Hedder din tabel virkeligt \"tabel\". Hedder den ikke navne, personer, eller sådan noget lign. ?
Avatar billede ndh Nybegynder
22. august 2000 - 15:35 #9
Min tabel hedder faktisk Tabel;-). Men jeg får stadig ovenstående fejl, selvom jeg tilføjer dine sql-strenge
Avatar billede sjensen Nybegynder
22. august 2000 - 15:55 #10
Du siger at fejlen kommer i linie 58. (/search1.asp, linje 58).

Hvad står der i linie 58 ?

I øvrigt er det lige et spm. om ASP vil acceptere æ,ø og å i rs(\"feltnavn\"), som f.eks. rs(\"Fødselsdato\") og rs(\"Fødested\")

Ved du med sikkerhed at dette virker ?
Avatar billede ndh Nybegynder
22. august 2000 - 16:08 #11
ASP har tidligere accepteret de danske karakterer - så det skulle være ok!

i linie 58 står der følgende:

rs.Open strSQL, strDNS, 1
Avatar billede nettet Nybegynder
29. august 2000 - 08:57 #12
Hvis du anvender AND i dine sql-strings - kan det være en fordel måske at indsætte en række if-sætninger, imellem de forskellige kombinationer, for at værdien 0 ikke køres igennem din kode. F.eks.
If Len(strKeyword1) > 0 Then
strSQL = strSQL & \" AND (Efternavn LIKE \'%\" & strKeyword1 & \"%\')\"
End if

o.s.v.
Avatar billede sjensen Nybegynder
29. august 2000 - 10:42 #13
ja, jeg tror du skal have endnu et parameter på rs.open kommandoen:

rs.Open strSQL, strDNS, 1, 1
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