Avatar billede cthun Nybegynder
01. oktober 2001 - 10:14 Der er 11 kommentarer og
1 løsning

ASP søgning

Hvordan laver jeg en søge ting, ud fra en DB, der viser 10 poster ad gangen??

...Det skal selvfølgelig være så\'n at man kan klikke på næste, og så kommer de næste 10..

<cthun>
Avatar billede tmceu Praktikant
01. oktober 2001 - 10:19 #1
Det du leder efter, kaldes Recordset paging og du kan se et eksempel herunder:

<%@ LANGUAGE=\"VBSCRIPT\" %>
<% \' Listing 17.1 Paging through a Recordset Part 1: Declaration
Option Explicit
Response.Expires = 0
%>
<!--#include file=\"adovbs.inc\"-->
<%
Const intPageSize = 10
Dim intCurrentPage, objConn, objRS, strQ
Dim intTotalPages, intI

\' Listing 17.2 Paging Part 2: Setting the Current Page Number
If Request.ServerVariables(\"CONTENT_LENGTH\") = 0 Then
  intCurrentPage = 1
Else
  intCurrentPage = CInt(Request.Form(\"CurrentPage\"))
  Select Case Request.Form(\"Submit\")
      Case \"Previous\"
        intCurrentPage = intCurrentPage - 1
      Case \"Next\"
        intCurrentPage = intCurrentPage + 1
  End Select
End If

\' Listing 17.3[em]Paging[md]Part 3: Preparing the Recordset for Paging
Set objConn = Server.CreateObject(\"ADODB.Connection\")
objConn.Open \"Data Source=Northwind;User ID=sa;Password=;\"

Set objRS = Server.CreateObject(\"ADODB.Recordset\")
objRS.CursorLocation = adUseClient
objRS.CursorType = adOpenStatic
objRS.CacheSize = intPageSize

\' Listing 17.4[em]Paging[md]Part 4: Opening the Recordset
strQ = \"SELECT Customers.CompanyName, Orders.OrderDate \"
strQ = strQ & \"FROM Orders INNER JOIN Customers ON \"
strQ = strQ & \"Orders.CustomerID = Customers.CustomerID \"
strQ = strQ & \"ORDER BY Orders.OrderDate, \"
strQ = strQ & \"Customers.CompanyName\"
objRS.Open strQ, objConn, , , adCmdText

\' Listing 17.5 Paging Part 5: Setting the Recordset cursor
objRS.PageSize = intPageSize
If Not(objRS.EOF) Then objRS.AbsolutePage = intCurrentPage

\' Listing 17.6 Paging Part 6: Sending Database Data
intTotalPages = objRS.PageCount
%>
<HTML><BODY>
<B>Customer: OrderDate</B><P>
<%
For intI = 1 to objRS.PageSize
  Response.Write Server.HTMLEncode(objRS(\"CompanyName\") & \":\" & objRS(\"OrderDate\")) & \"<BR>\"
  objRS.MoveNext
  If objRS.EOF Then Exit For
Next

objRS.Close : objConn.Close
Set objRS = Nothing : Set objConn = Nothing
%>

<BR>
Page <%= intCurrentPage %> of <%= intTotalPages %><P>

<% \' Listing 17.7 Paging Part 7: Providing Web Form for Paging %>
<FORM ACTION=\"<%= Request.ServerVariables(\"SCRIPT_NAME\") %>\" METHOD=\"POST\">
<INPUT TYPE=\"Hidden\" NAME=\"CurrentPage\"
VALUE=\"<%= intCurrentPage%>\">
<%
If intCurrentPage > 1 Then %>
<INPUT TYPE=\"Submit\" NAME=\"Submit\" VALUE=\"Previous\">
<% End If
If intCurrentPage <> intTotalPages Then %>
<INPUT TYPE=\"Submit\" NAME=\"Submit\" VALUE=\"Next\">
<% End If %>
</FORM>
</BODY></HTML>
Avatar billede cthun Nybegynder
01. oktober 2001 - 10:27 #3
tmceu >>Hvor skal jeg ligge den linje der henter db\'en??
Avatar billede tmceu Praktikant
01. oktober 2001 - 10:38 #4
Det er allerede inkluderet, der ligger lige under linien

\' Listing 17.3[em]Paging[md]Part 3: Preparing the Recordset for Paging
Avatar billede cthun Nybegynder
01. oktober 2001 - 11:23 #5
Nu har jeg prøvet keysersoze\'s forslag, men kan ikke helt få det til at køre... Den søger rigtig nok... Problemet kommer når jeg trykker på \"Næste side\"

Hvad gør jeg galt??

<% Response.Buffer = True %>
<html><head>
<title>Paging af et recordset</title>
</head><body>

<%
intPage = Request(\"side\")
If isNumeric(intPage) = False Or intPage < 1 Then
    intPage = 1
End If

strKeyword = Trim(Request.Form(\"keyword\"))

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

Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"SELECT LinkID, Navn, Beskrivelse FROM Links WHERE\"
strSQL = strSQL & \" (LinkID LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (Navn LIKE \'%\" & strKeyword & \"%\')\"
strSQL = strSQL & \" OR (Beskrivelse LIKE \'%\" & strKeyword & \"%\')\"
strDSN = \"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\"&Server.MapPath(\"links.mdb\")
rs.Open strSQL, strDSN, 1
If Not (rs.BOF Or rs.EOF) Then
    rs.PageSize = 10
    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 rs(\"LinkID\") & \"<br>\"
    intRecCount = intRecCount - 1
    rs.MoveNext
    Loop
End If
rs.Close
Set rs = Nothing

Response.Write \"<p>Gå til side \"
For intNum = 1 To intPageCount
    Response.Write \"<a href=soeg.asp?side=\" & intNum & \">\" & intNum & \"</a> \"
Next

Response.Write \"<p>\"
If Clng(intPage) > 1 Then
    Response.Write \"<a href=soeg.asp?side=\" & 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=soeg.asp?side=\" & intPage + 1 & \">&gt;&gt;</a> \"
Else
    Response.Write \"&gt;&gt;\"
End If
%>

</body></html>
Avatar billede cthun Nybegynder
01. oktober 2001 - 11:30 #6
Jeg gir 300 point ekstra til den der kan svare på mit spørgsmål....

C\'mon... der 500 point på spil her!!
Avatar billede keysersoze Ekspert
01. oktober 2001 - 12:21 #7
hvad sker der af fejl når du trykker på næste?
Avatar billede cthun Nybegynder
01. oktober 2001 - 12:30 #8
Det den gør når man trykker på næste er at den henter \"soeg.as?side=2\" og det kan den ikke finde ud af!!

prøv og kig på http://thun.dyndns.dk/temp/

brug søgeordet \"and\"

<cthun>

Avatar billede keysersoze Ekspert
01. oktober 2001 - 12:48 #9
grunden er formentlig dette:

strKeyword = Trim(Request.Form(\"keyword\"))

da du går videre til en ny side glemmer den dit keyword, og da denne her er tom videresender den dig til soeg.hml jf. denne:

Response.Redirect(\"soeg.htm\")

derfor er du tvunget til at udelade efterspørgslen på keyword når den ikke skal bruges
Avatar billede tmceu Praktikant
01. oktober 2001 - 12:57 #10
Du kan evt. udvide dit link og flytte keyword op i querystring

Response.Write \"<a href=soeg.asp?side=\" & intNum & \"?keyword=\" & Trim(Request.Form(\"keyword\")) & \">\" & intNum & \"</a> \"

du skal så selvfølgelig have rettet den til, så den fra side 2 bruger keyword fra request.
Avatar billede keysersoze Ekspert
01. oktober 2001 - 13:11 #11
hvis det skal gøres på den måde så hedder det altså noget nærmere:

Response.Write \"<a href=soeg.asp?side=\" & intNum & \"&keyword=\" & Trim(Request(\"keyword\")) & \">\" & intNum & \"</a> \"

og så skal

strKeyword = Trim(Request.Form(\"keyword\"))

nok laves om til

strKeyword = Trim(Request(\"keyword\"))
Avatar billede tmceu Praktikant
01. oktober 2001 - 13:27 #12
korrekt, jeg havde lige glemt ?side, derfor skal det selvfølgelig være &keyword :-)
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