Markus: Seitenweise Navigation mit ASP

Hallo,

ich habe ein Problem bei der Erstellung eines ASP-Scriptes für eine Seitenweise Navigation wie bei Suchmaschinen.
Zwar habe ich mir das Beispiel von Jörg Krause geholt, doch irgendwie funktioniert das nicht.

Kann mir jemand helfen so eine Navigation zu erstellen, bzw. die von Jörg Krause zu ändern, das sie geht.

Danke

  1. Moin Markus,
    wo kommen denn die Daten her ? Aus einer Datenbank vermutlich, dann kannst du einfach nen Counter einfügen, der immer Datensatz für Datensatz nach vorne geht(rs.Movenext) und bei einer bestimmten Anzahl aufört, dann kannst du via Querystring die ID festlegen, bei der die nächste Seite anfangen soll anzuzeigen.
    Robert.

    1. Hallo Robert,

      danke für die Hilfe, doch leider bin ich noch ein unerfahrener ASPler *lächel*

      Könntest Du mir vielleicht ein kleines Beispiel angeben, wäre nett.

      Danke

      Markus

      Moin Markus,
      wo kommen denn die Daten her ? Aus einer Datenbank vermutlich, dann kannst du einfach nen Counter einfügen, der immer Datensatz für Datensatz nach vorne geht(rs.Movenext) und bei einer bestimmten Anzahl aufört, dann kannst du via Querystring die ID festlegen, bei der die nächste Seite anfangen soll anzuzeigen.
      Robert.

      1. Sorry Markus,
        also die Sachen kommen aus ner Datenbank ?
        Dann sieht das wahrscheinlich so aus:

        SQL = "SELECT * FROM Content ORDER BY ID Where StartID > " & Request.Querystring("startid")
        rs = Server.CreateObject("ADODB.Recordset")
        rs.Open SQL, Application("conn"), 3, 3
        Counter = 0
        Do While Counter < 30 AND rs.EOF = false
          Response.Write(rs.Fields("Inhalt"))
          Counter = Counter + 1
          ID = rs.Fields("ID")
          rs.Movenext
        Loop
        Nextstartid = ID
        rs.Close

        Dann is der link auf den nächsten Teil test.asp?startid=" & Nextstartid

        Hope that helps, Robert.

        1. SQL = "SELECT * FROM Content ORDER BY ID Where StartID > " & Request.Querystring("startid")

          Hallo,

          obiges Beispiel hat nur einen Haken, andere Sortierung oder nicht
          aufeinanderfolgende IS's und schon haperts.

          Probier doch mal das hier:

          <%
          SQL = "..."
          Set objRS = Server.CreateObject("ADODB.Recordset")
              objRS.PageSize = 10 ' Oder die gewünschte Anzahl der Sätze
              objRS.Open SQL, conn, 3, 3
              If Not objRS.EOF Then
                  PageCount = objRS.PageCount ' Anzahl der Seiten gesamt ermitteln
                  If PageCount < PageNumber Then
                      PageNumber = 1
                  End if
                  objRS.AbsolutePage = PageNumber ' Aktuelle Seite wird mit URL übergeben
                  Do While Not objRS.EOF And intCounter < objRS.PageSize
                      ...
                      objRS.MoveNext
                      intCounter = intCounter + 1
                  Loop
              End if
              objRS.Close
          Set objRS = Nothing
          %>

          Tschau, Stefan

          1. Erstmal vielen Dank für die ganzen Antworten.

            Hier ist mal mein Script. Ich glaube das Problem liegt im Request.Form - Als erstes lese ich Daten aus einem Formular aus und danach rufe ich das Script selbst wieder auf und da denke ich mal liegt das Problem.

            <PRE>

            <!--#INCLUDE VIRTUAL="../../inc/ADOVBS.INC" -->
            <%
            ' zuerst wird festgestellt, in welche Richtung geblättert wird
            ' beim ersten Aufruf der Seite sind alle Parameter NULL
            query = Request.QueryString("MOVE")

            IF query = "next" THEN  
            Session("CurrentPage")=Session("CurrentPage")+1
            END IF

            IF query = "prev" THEN  
            Session("CurrentPage")=Session("CurrentPage")-1
            END IF

            IF query <> "" AND NOT query = "prev" AND NOT query = "next" THEN  
            Session("CurrentPage") = CINT(query)
            END IF

            ' Beim ersten Mal Startwert der Seitenzähler auf 1 setzen
            IF Session("CurrentPage")="" THEN
               Session("CurrentPage")= 1
            END IF

            Set Conn=Server.CreateObject("ADODB.Connection")
            Set RS=Server.CreateObject("ADODB.RecordSet")
            Conn.Open "web_kunden"
            RS.Open "SELECT * FROM BC_Auslesen where K_Name LIKE '" + Request.Form("K_Name") + "%%' ORDER BY K_Name", Conn, adopenstatic

            howmanyrecs=RS.recordcount

            RS.PageSize = 30
            RS.AbsolutePage = Session("CurrentPage")
            DIM zeile
            zeile = 0
            %>

            <BR><BR>

            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="570">
            <TR>
            <TD WIDTH="70"></TD>
            <TD WIDTH="500">

            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="500">
            <TR>
            <TD WIDTH="270" BGCOLOR="#004080">  <FONT SIZE="2" FACE="ARIAL" CLASS="font9" COLOR="#FFFFFF"><B>Suchergebnis</B></FONT></TD>
            <TD WIDTH="55"><IMG SRC="../../images/fv_bw.gif"></TD>
            <TD WIDTH="175" ALIGN="RIGHT"><FONT SIZE="2" FACE="ARIAL" CLASS="font9">[ <A HREF="s_bcard_suchen.idc">neue Suche</A> ]</FONT></TD>
            </TR>
            <TR><TD COLSPAN="3" BGCOLOR="#004080"></TD></TR>
            </TABLE>

            <BR>

            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="1" WIDTH="500">

            <%
            IF howmanyrecs = 0  THEN
            response.write "<TR><TD ALIGN=CENTER><BR><FONT SIZE=2 FACE=ARIAL CLASS=font9>"
            response.write "Es wurden <B>" & howmanyrecs & " Datensätze "
            IF Request.Form("A_ID") <> 0 THEN
            response.write "in Ihrem Adressbuch"
            ELSE
            END IF
            response.write "</B> gefunden</FONT><TD><TR>"
            ELSE
            END IF
            %>

            <%
            WHILE NOT RS.EOF AND zeile < RS.PageSize
            %>

            <TR BGCOLOR="#EFEFEF">
            <TD WIDTH="250"><FONT SIZE="2" FACE="ARIAL" CLASS="font9"><A HREF="s_bcard_eintrag.idc?K_ID=<%=RS("K_ID")%>&KL_ID=<%=Request.Form("KL_ID")%>&IP=<% = Request.ServerVariables("REMOTE_ADDR")%>"><B><%=RS("K_Name")%></B> <%=RS("K_Vorname")%> <%=RS("K_Titel")%></A></FONT></TD>
            <TD WIDTH="250" ALIGN="RIGHT"><FONT SIZE="2" FACE="ARIAL" CLASS="font9"><A HREF="s_bcard_eintrag.idc?K_ID=<%=RS("K_ID")%>&IP=<% = Request.ServerVariables("REMOTE_ADDR")%>"><%=RS("K_LKZ")%> - <%=RS("K_PLZ")%> <%=RS("K_Ort")%></A></FONT></TD>
            </TR>
            <TR>
            <TD></TD>
            <TD ALIGN="RIGHT" BGCOLOR="#EFEFEF"><FONT SIZE="2" FACE="ARIAL" CLASS="font9"><A HREF="s_bcard_eintrag.idc?K_ID=<%=RS("K_ID")%>&IP=<% = Request.ServerVariables("REMOTE_ADDR")%>"><%=RS("K_Unternehmen")%></A></FONT></TD>
            </TR>
            <TR><TD COLSPAN="2" HEIGHT="10"></TD></TR>

            <%
            RS.MoveNext  
            zeile = zeile + 1
            WEND
            %>

            </TABLE>

            <BR>

            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="1" WIDTH="500">
            <TR>
            <TD ALIGN="CENTER"><FONT SIZE="1" FACE="ARIAL" CLASS="font8">

            <!-- Navigationsinstrumente erzeugen -->
            <%
              IF Session("CurrentPage") > 1 THEN
            %>
              
            <A HREF="testsuchen.asp?MOVE=prev"> [Zurück] </A>

            <%
            END IF
              FOR i = 1 TO RS.PageCount    
              IF RS.AbsolutePage <> i THEN    
            %>

            <A HREF="testsuchen.asp?MOVE=<% =i %>"> <% =i %> </A>
              
            <% ELSE %>

            <B><% = i %></B>

            <%
            END IF
            NEXT
            IF Session("CurrentPage") < RS.PageCount THEN
            %>

            <A HREF="testsuchen.asp?MOVE=next"> [Weiter] </A></FONT></TD>
            </TR>
            </TABLE>

            </TD></TR>
            </TABLE>

            <%
            END IF
            RS.Close
            set RS=nothing
            Conn.Close
            %>

            </PRE>

  2. Hi!
    Eine andere Möglichkeit wäre noch das RecordSet-Attribut PageCount.
    Da Du Dich jedoch noch nicht so auskennst, wäre das vielleicht ein wenig zu kompliziert für den Anfang.

    Solltest Du trotzdem Lust haben Dich da tiefer einzuarbeiten, wäre Dir dieser Link vielleicht ganz hilfreich:

    http://www.learnasp.com/learn/dbtablepaged.asp

    Falls dazu noch kleinere Fragen auflaufen, kannst Du mich auch per Email anschreiben (ich helfe dann soweit ich es kann) oder eben hier nochmal posten.

    mfg
    JankoW

    P.S.: Es gibt eigentlich keinen großen Unterschied zu Roberts Lösung. Die hier sieht nachher vielleivht etwas eleganter aus, das ist alles