Avatar billede xtremer Nybegynder
11. august 2002 - 22:14 Der er 20 kommentarer og
1 løsning

Count antal søgeresultater

Hvordan tæller man hvor mange resultater der er fundet på en søgning i en access database ???

Har ikke så meget forstand på det, så det skal skæres ud i pap for mig hvordan jeg skal sætte det ind i denne kode:

<%
strMode = Request.Querystring("mode")
select case strMode
case "id"

Response.Buffer = True

' Her opdateres hits når brugeren bliver sendt til et link
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("links.mdb")
If Request.QueryString("id") <> "" Then
    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "SELECT * FROM links WHERE (ID = " & Request.QueryString("id") & ")"
    rs.Open strSQL, myConn, 1, 3
    If Not (rs.BOF Or rs.EOF) Then
        rs("Hits") = rs("Hits") + 1
        strURL = rs("URL")
        rs.Update
        rs.Close
        myConn.Close
        Set rs = Nothing
        Set myConn = Nothing
        Response.Clear
        Response.Redirect(strURL)
    End If
End If
%>

<% case "search"
' Siden med søgeresultater

' Database connection
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("links.mdb")
' Henter søgeorden fra formularen
strKeyword = Trim(Request.Form("søgeord"))

If Len(strKeyword) = 0 Then
' Hvis der ikke er skrevet i formularen sendes brugeren tilbage
    Response.Clear
    Response.Redirect ("7_soeg_0.shtml")
Else
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT * FROM links WHERE"
strSQL = strSQL & " (godkendt = 'ja') AND ("
strSQL = strSQL & " (id LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (hits LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (søgeord LIKE '%" & strKeyword & "%'))"

        Response.Write "<tr><td width=""100%"" colspan=""2""><font size=""1""><b>Søgeresultater for  » </b>" & strKeyword & "</b></font></td></tr>"

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then


' Hvis søgningen gav resultat
    Do While Not rs.EOF
If farve=1 Then
bg="#FCFCFC"
Farve= Farve + 1
Else
bg="#E5E5E5"
farve=1
End If
        Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """

target=""_self"">" & rs("Navn") & "</a></b></div><br>" & rs("Beskrivelse") & "<br><br><i>Denne side har været besøgt <b>" & rs("Hits") & "

gange</i></b></font></td></tr>"

        rs.MoveNext
    Loop

Else
response.redirect ("7_soeg_1.shtml")
End If
rs.Close
Set rs = Nothing
end select %>
Avatar billede tmceu Praktikant
11. august 2002 - 23:12 #1
Jeg orker ikke at kigge hele din kode igennem, men der er et par måder at gøre det på.

1. RecordCount property'en på recordsettet. Denne understøttes dog ikke af ret mange drivere.

2. Lave en COUNT(*) med samme WHERE clause som anvendes til selve søgningen, dvs. 2 database kald; en til COUNT'en og en til søgningen.

3. Lav en tæller inde i din Do...Loop i ASP, der tæller antallet af poster. Dette kunne eksempelvis være:

i = 0

Do While Not rs.EOF
rs.MoveNext
i = i + 1
Loop

Response.Write "Antal resultater: " & i
Avatar billede lester_dk Nybegynder
11. august 2002 - 23:16 #2
Du skal nok lave en variabel..  f.eks.

Dim SearchCount
SearchCount = 0

og så sættes

' Hvis søgningen gav resultat
    Do While Not rs.EOF
If farve=1 Then
bg="#FCFCFC"
Farve= Farve + 1
Else
bg="#E5E5E5"
farve=1
End If
        Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """

target=""_self"">" & rs("Navn") & "</a></b></div><br>" & rs("Beskrivelse") & "<br><br><i>Denne side har været besøgt <b>" & rs("Hits") & "

gange</i></b></font></td></tr>"

'Ligger 1 til hvergang der udskrives et søgeresultat
SearchCount = SearchCount + 1

        rs.MoveNext
    Loop

Er ikke stiv i ASP... men prøv det....

/Lester_dk
Avatar billede easysoft_studios Nybegynder
11. august 2002 - 23:17 #3
<%
strMode = Request.Querystring("mode")
select case strMode
case "id"

Response.Buffer = True

' Her opdateres hits når brugeren bliver sendt til et link
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("links.mdb")
If Request.QueryString("id") <> "" Then
    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "SELECT * FROM links WHERE (ID = " & Request.QueryString("id") & ")"
    rs.Open strSQL, myConn, 1, 3
    If Not (rs.BOF Or rs.EOF) Then
        rs("Hits") = rs("Hits") + 1
        strURL = rs("URL")
        rs.Update
        rs.Close
        myConn.Close
        Set rs = Nothing
        Set myConn = Nothing
        Response.Clear
        Response.Redirect(strURL)
    End If
End If
%>

<% case "search"
' Siden med søgeresultater

' Database connection
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("links.mdb")
' Henter søgeorden fra formularen
strKeyword = Trim(Request.Form("søgeord"))

If Len(strKeyword) = 0 Then
' Hvis der ikke er skrevet i formularen sendes brugeren tilbage
    Response.Clear
    Response.Redirect ("7_soeg_0.shtml")
Else
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT COUNT(id) AS soegeresultater FROM links WHERE"
strSQL = strSQL & " (godkendt = 'ja') AND ("
strSQL = strSQL & " (id LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (hits LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (søgeord LIKE '%" & strKeyword & "%'))"

        Response.Write "<tr><td width=""100%"" colspan=""2""><font size=""1""><b>Søgeresultater for  » </b>" & strKeyword & "</b></font></td></tr>"

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then


' Hvis søgningen gav resultat
    Do While Not rs.EOF
If farve=1 Then
bg="#FCFCFC"
Farve= Farve + 1
Else
bg="#E5E5E5"
farve=1
End If
        Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """

target=""_self"">" & rs("Navn") & "</a></b></div><br>" & rs("Beskrivelse") & "<br><br><i>Denne side har været besøgt <b>" & rs("Hits") & "

gange</i></b></font></td></tr>"

        rs.MoveNext
    Loop
    Response.Write("Søgeresultater: " & soegeresultater)
Else
response.redirect ("7_soeg_1.shtml")
End If
rs.Close
Set rs = Nothing
end select %>
Avatar billede lester_dk Nybegynder
11. august 2002 - 23:17 #4
glemte lige at du skal bruge en omgang response.write "Søgeresultater "& SearchCount
Avatar billede easysoft_studios Nybegynder
11. august 2002 - 23:18 #5
lester_dk >> den er liiidt langsom på store recordsets tror jeg :) har selv brugt den metode engang...
Avatar billede lester_dk Nybegynder
11. august 2002 - 23:27 #6
maybe.....  men den er simpel.... det må du da gi' mig... *lol*
Avatar billede xtremer Nybegynder
12. august 2002 - 16:20 #7
Skal have noget mere konkret som virker....Har prøver ovenstående.
Avatar billede lester_dk Nybegynder
12. august 2002 - 18:21 #8
så vidt jeg kan se.....



' Hvis søgningen gav resultat
soegeresultater = 0 ' først nulstilles soegeresultater.

    Do While Not rs.EOF
If farve=1 Then
bg="#FCFCFC"
Farve= Farve + 1
Else
bg="#E5E5E5"
farve=1
End If
        Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """

target=""_self"">" & rs("Navn") & "</a></b></div><br>" & rs("Beskrivelse") & "<br><br><i>Denne side har været besøgt <b>" & rs("Hits") & "

gange</i></b></font></td></tr>"
soegeresultater = soegeresultater + 1 'for hvert gennemløb vokser soegeresultater med 1
        rs.MoveNext
    Loop
    Response.Write("Søgeresultater: " & soegeresultater)  'mener ikke dine paranteser er nødvendige.... tværtimod

hjælper det....¿
Avatar billede xtremer Nybegynder
12. august 2002 - 18:32 #9
Får følgende fejl:

Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0409)
Strengkonstanten er uafsluttet
/DestinationSamsoe/dsmenusoeg.asp, line 194, column 123
Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """
Avatar billede xtremer Nybegynder
12. august 2002 - 18:40 #10
Her er linie 194:

Farve= Farve + 1 ???
Avatar billede lester_dk Nybegynder
12. august 2002 - 18:41 #11
det er noget du selv har flækket sammen.........  det giver ingen mening..........
Avatar billede lester_dk Nybegynder
12. august 2002 - 18:42 #12
doh... postede mit svar til dig på en forkert spg...

Erstat med

Response.Write "<tr><td valign=top><div class='header1'><font size=1><b><a href='links.asp?mode=id&id='" & rs("ID") & ""

Det er et helvede med " og '
Avatar billede xtremer Nybegynder
12. august 2002 - 18:43 #13
Hvis det kan gøre det nemmere kan hele filen + databasen downloades fra mit website: http://www.hgx.dk/db.zip
Avatar billede lester_dk Nybegynder
12. august 2002 - 18:47 #14
Det hjalp ikke rigtigt.......  hvis jeg har forstået det korrekt..... så skal den skrive hvor mange den lige har vist til brugeren... right???

Forstår ikke det der farve-halløj + 1
Avatar billede lester_dk Nybegynder
12. august 2002 - 18:55 #15
Indsæt følgende.....  der hvor det nu passer ind......... der er 3 tilføjelser... resten er som din originalkode.......

counter = 0 'Tilføjelse nummer 1
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
' Hvis søgningen gav resultat
    Do While Not rs.EOF
If farve=1 Then
bg="#FCFCFC"
Farve= Farve + 1
Else
bg="#E5E5E5"
farve=1
End If
        Response.Write "<tr><td valign=top><div class=""header1""><font size=1><b><a href=""links.asp?mode=id&id=" & rs("ID") & """ target=""_self"">" & rs("Navn") & "</a></b></div><br>" & rs("Beskrivelse") & "<br><br><i>Denne side har været besøgt <b>" & rs("Hits") & " gange</i></b></font></td></tr>"
counter = counter + 1 'Tilføjelse nummer 2
        rs.MoveNext
    Loop

Else
response.redirect ("7_soeg_1.shtml")
End If

rs.Close
Set rs = Nothing


end select %>


<% Response.write "Antal resultater: " & counter %> 'Tilføjelse nummer 3
Avatar billede lester_dk Nybegynder
12. august 2002 - 19:08 #16
Og skulle I have et ledig job til mig....  så bare sig til......  bor i Slagelse... er uddannet Multimedie-designer....  se evt. http://kenneth.vidur.dk for mere.....  Kan lidt af hvert indenfor Web, multimedie og design.
Avatar billede xtremer Nybegynder
12. august 2002 - 19:17 #17
Jep.....Den skal skrive hvor mange søgeresultater den lige har vist til brugeren. Men din sidste rettelse virkede heller ikke. Måske det var nemmere og downloade filen og prøve selv at se, hvad der sker når man sætter den kode ind som du har forslået....
Avatar billede xtremer Nybegynder
12. august 2002 - 19:19 #18
Sorry prøver lige...havde ikke set du havde skrevet noget nyt :-)
Avatar billede lester_dk Nybegynder
12. august 2002 - 19:26 #19
Er du freelancer hos http://www.hypergrafx.dk/ eller fast...?

Med de 3 tilføjelser jeg har lavet..........  der virker det for mig...
Avatar billede xtremer Nybegynder
12. august 2002 - 23:29 #20
Thx :-) Det virker sgu. Vi har ingen ledige job for tiden, men har dig i tankerne som evt. freelancer
Avatar billede lester_dk Nybegynder
12. august 2002 - 23:35 #21
Det er bare i orden.... endnu bedre end points..... yeah......  og kom endelig med noget arbejde der skal laves...... Hvis det er seriøst nok... så flytter jeg sgu bare derover.....  kommer jo trods alt fra Thy.. *lol*

Kan jeg ikke få din mail....  du kan sende den til mig på kenneth@vidur.dk og fortælle lidt mere om jeres foretagene.
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