Avatar billede oasen Nybegynder
21. marts 2002 - 07:43 Der er 15 kommentarer og
1 løsning

Søgefunktion? Bare rolig - er lavet...

Jeg har lavet mig en sød lille søgefunktion til mit site. Den gennemløber en enkelt kolonne i Access, og opskriver links til indholdet i de celler, der matcher søgeordet. Mens løkken kører optælles antal fundne resultater med en variabel ('t' kan vi kalde den). Meget simpelt.
Men jeg kan kun udskrive 't' efter løkken, dvs. efter alle links´ne er opskrevet.
Nu har I sikkert gættet, hvad problemet er. 't' vil jeg gerne udskrive i toppen af siden, altså inden søgeresultaterne vises. Kan nogen komme med en løsning på det? 
Avatar billede oasen Nybegynder
21. marts 2002 - 07:43 #1
Hvis det vil hjælpe at se kildekoden, så sig lige til...
Avatar billede oasen Nybegynder
21. marts 2002 - 07:46 #2
Det hele foregår selvfølgelig i ASP (jvf. kategorien)
Avatar billede mr.meincke Nybegynder
21. marts 2002 - 07:48 #3
du kan lige sende koden til n.persson@mail.dk
Avatar billede mr.meincke Nybegynder
21. marts 2002 - 07:48 #4
du kan = kan du ikke
Avatar billede meyer Nybegynder
21. marts 2002 - 07:49 #5
Kør denne her inden du lister linkene:

strSQL = "SELECT count(*) as Found FROM dintabel Where ditfelt = '"& dit søgeord &"'"
Set rs = myConn.Execute(strSQL)
t = rs("found")
Avatar billede mr.meincke Nybegynder
21. marts 2002 - 07:57 #6
hvis man virkelig skal lave koden selv så....:
-------- search.asp --------
<form method="Post" action="./results.asp">
<input type="Text" name="Keyword" value="<%=Request.Form("Keyword")%>">
<input type="Submit" name="action" value="Søg">
</form>

-------- results.asp --------
<form method="Post" action="./results.asp">
<input type="Text" name="Keyword" value="<%=Request.Form("Keyword")%>">
<input type="Submit" name="action" value="Søg">
</form>

<%
strKeyword = Request.Form("Keyword")
strKeyword = Replace(strKeyword,"'","''")
if strKeyword = "" then
Response.Redirect("search.asp")
end if

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("dinDB.mdb")
Set ialt = Conn.Execute("SELECT COUNT(*) AS FOUND FROM Dintabel WHERE Ditfelt LIKE '%" & strKeyword & "%'"")
strIalt = ialt("FOUND")
Set rs = Conn.Execute("SELECT * FROM Dintabel WHERE Ditfelt LIKE '%" & strKeyword & "%'"")

do until (rs.eof or rs.bof)
%>
URL: <%=rs("URL")%>
<%
rs.MoveNext
loop
%>
Avatar billede mr.meincke Nybegynder
21. marts 2002 - 07:58 #7
og mit var et svar....
Avatar billede mr.meincke Nybegynder
21. marts 2002 - 07:58 #8
og nu vil jeg tage i min dejlige skole...... :)
Avatar billede oasen Nybegynder
21. marts 2002 - 08:38 #9
Undskyld - jeg var lige midt i noget; Koden er ikke særlig lang, så I får den lige her:


******************************************

<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>

<%
' Henter værdien fra form.htm
strKeyword = Trim(Request.Form("input"))

Response.Write "<h2>Resultat af din forespørgsel:</h2><br>"

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("form.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT ID, Track FROM audiotabel WHERE"
strSQL = strSQL & " (Track LIKE '%" & strKeyword & "%') ORDER BY Track"


' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("audio.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen

counter = 0
TrackTemp = rs("Track")

Response.Write "<li><a href='lyrik.asp?id=" & rs("id") & "'>" & rs("Track") & "</a></li><br>"
counter = counter + 1

Do

If TrackTemp <> rs("Track") Then

        Response.Write "<li><a href='lyrik.asp?id=" & rs("id") & "'>" & rs("Track") & "</a></li><br>"
    TrackTemp = rs("Track")
    counter = counter + 1
    rs.MoveNext

Else

rs.MoveNext

End If

Loop While Not rs.EOF


Response.Write "<br><a href='java script:history.go(-1)'>Foretag ny søgning</a>"

Else

    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<h4>Forespørgslen på '<font color='red'>" & strKeyword & "</font>' gav ingen resultater.</h4><br>"
    Response.Write "<a href='java script:history.go(-1)'>Foretag ny søgning</a>"
End If

myConn.Close
Set myConn = Nothing
%>

</body>
</html>

**********************************

Her ses counter´en jeg har sat ind. Det er DEN jeg vil udskrive i toppen, inden links´ne skrives op.
Avatar billede oasen Nybegynder
21. marts 2002 - 08:46 #10
Meyer---> Mener faktisk at jeg har prøvet det, men jeg forsøger lige igen.
Problemet er jo, at antallet af fundne records skal skrives op, inden counteren i løkken er færdig med at tælle op. Lyder umiddelbart lidt umuligt i mine ører, men jeg håber der kommer en løsning........
Avatar billede oasen Nybegynder
21. marts 2002 - 08:49 #11
Som det ses har jeg været nødt til at lave en variabel "TrackTemp", idet enkelte af recordsne indeholder samme tekst. Så i virkeligheden finder den af og til jo flere records end der faktisk opskrives.
Avatar billede mgade Nybegynder
21. marts 2002 - 10:28 #12
Lad være med at skrive resultatet ud før til sidst. Undervejs opsamler du resultatet i en ny variable, fx track all.

Erstat:
Response.Write "<li><a href='lyrik.asp?id=" & rs("id") & "'>" & rs("Track") & "</a></li><br>"

Med:
Trackall = Trackall & "<li><a href='lyrik.asp?id=" & rs("id") & "'>" & rs("Track") & "</a></li><br>"

Så til sidst:

Trackall = "Så mange " & counter & "<br>" & Trackall
Response.Write Trackall
Avatar billede oasen Nybegynder
21. marts 2002 - 10:59 #13
Manden er jo genial *g* Tak!

Har du lyst til at svare på et enkelt spørgsmål mere, nu hvor du jo har sat dig ind i koden? Du skal nok få lidt ekstra oven i hatten...
Avatar billede oasen Nybegynder
21. marts 2002 - 11:45 #14
Du kan se med på: http://www.eksperten.dk/spm/188051 hvis du har tid :)
Avatar billede mgade Nybegynder
21. marts 2002 - 11:58 #15
Taaark :-)

Men det andet spørgsmål er jo allerede løst på den goe' måde af cthun, kan jeg se. Siden skal bare omdøbes til denneside.asp, så burde det virke, hvis det virkede da siderne var adskilte.
Avatar billede oasen Nybegynder
21. marts 2002 - 12:45 #16
Ja, det kunne du også have fortalt mig, men nu får cthun også en god dag :o)
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