Das Ausgeben von einer begrenzten Anzahl von Datensätzen pro (ASP-)Seite ist eine oft benötigte Sache. Wir finden dies z.B. in wahrscheinlich jeder Suchmaschine. Wer mit ADO arbeitet, um DB´s anzusprechen, kann hierfür die AbsolutePage-Eigenschaft von A(ccess)D(ata)O(bject) verwenden. Ziel ist es, z.B. 5 Datensätze pro Seite anzuzeigen, UND per Buttons die vorherigen oder die nächsten 5 Datensätze abzufragen und auszugeben.
Welche Eigenschaften des ADO-Recordsets sollte man kennen...
PageSize = legt die Anzahl der Datensätze einer Seite fest
PageCount = beinhaltet die Anzahl der Seiten der kompletten Tabelle (abhängig von PageSize)
AbsolutePage = die aktuelle Seite auf der man sich befindet
Jetzt können wir loslegen. So werden jeweils 5 Datensätze pro Seite ausgeben. Per Button kann man sich vorwärts oder rückwerts durch das Recordset bewegen.
absolutepage.asp
Wenn ein Button gedrückt wurde, dann Hidden-Field mit "Request.Form" auslesen und von der aktuellen Seitennummer 1 abziehen oder zurechnen. Ansonsten den Startwert 1 für die Seitenvariable "strActPage" festlegen.
...... hier Script-Beginn im HTMLBODY <% if request.Form("backward") = "vorherige Seite" then strActPage = cint( request.Form("txtPosition") ) - 1 elseif request.Form("forward") = "naechste Seite" then strActPage = cint( request.Form("txtPosition") ) + 1 else strActPage = 1 end if set conn = Server.CreateObject("ADODB.Connection") set rs = Server.CreateObject("ADODB.Recordset") conn.Open '<<<< hier ConnectionString eintragen>>>>> rs.Open "customers", conn, adOpenStatic, adLockOptimistic |
Hier kommt der entscheidende Part. Die PageSize(Seitengroesse des Recordsets wird auf 5 gesetzt.
Die aktuelle Seitennummer(strActPage) wird der "AbsolutePage"-Eigenschaft zugewiesen.
Somit steht uns die Anzahl der Seiten(PageCount) zur Verfügung.
rs.PageSize=5 rs.AbsolutePage=strActPage response.Write "<b>Das ist die Seite: " & rs.AbsolutePage & " von insgesamt: " & rs.PageCount & "</b><br><br>" |
Mit der Wiederholung werden alle Datensätze der aktuellen Seite ausgeben. Wenn der letzte Datensatz des Recordsets(EOF) erreicht ist, wird die Wiederholung mit "Exit For" verlassen.
for i = 1 to rs.PageSize response.Write rs.Fields(0) & " : " & rs.Fields(1) & "<br>" rs.MoveNext if rs.EOF then exit for next set rs = nothing set conn = nothing %> |
Jetzt brauchen wir noch eine HTML-Form. Ich verwende hier die Methode "POST" um Informationen, wie welcher Button wurde gedrückt, oder welchen Inhalt hat mein Hidden-Field, vom Client zum Server zu übermitteln. Die Value-Eigenschaft des Hidden-Fields wird mit der aktuellen Seitenummer gefüllt.
<form method="POST" action=""> <input type="hidden" name= "txtPosition"value="<%=strActPage%>"> <INPUT type="submit" value="vorherige Seite" name="backward"> <INPUT type="submit" value="naechste Seite" name="forward"> </form> |