Besonders große Datenmengen auf ASP-Seiten darzustellen, bringt es mit sich
die Datensätze auf mehrere Seiten zu verteilen, damit der Benutzer sein Mausrad
beim Scrollen nicht allzu sehr abnutzen muss und etwas Übersichtlichkeit gewahrt
bleibt. Das Verfahren ist hinlänglich von Suchmaschinen bekannt. Dort gibt es
am oberen und unteren Rand meist Seitennavigatoren, die einen durch die Menge
der Datensätze führen.
In diesem ersten Teil des zweiteiligen Artikels soll dargestellt werden,
welche Möglichkeiten sich ASP-Entwicklern in Bezug auf die Auswahl der darzustellenden
Datensätze bietet, d.h. welche Bordmittel ADO bei der Datensatzabfrage von Hause
aus zur Verfügung stellt.
Ein ADO-Recordset bietet drei Eigenschaften, die für diesen Einsatz absolut
prädestiniert sind: PageSize, PageCount
und AbsolutePage. PageSize
legt fest wieviele Datensätze aus dem Recordset auf einmal gelesen werden sollen,
d.h. wie lang eine "Seite" werden soll, PageCount
gibt an wieviele "Seiten" sich bei der aktuell gewählten
PageSize und der Gesamtanzahl der Datensätze ergeben und
AbsolutePage legt fest welche Seite gelesen werden
soll.
Gehen wir ein Beispiel durch. Gegeben ist eine Tabelle mit 330 Datensätzen,
die in Häppchen á 25 Datensätzen angezeigt werden sollen. Beginnen wir zunächst
mit den Vorarbeiten, der ADO-Verbindung und dem Recordset:
Set objConn = Server.CreateObject("ADODB.Connection")
strConn = "<Verbindungszeichenfolge zur Datenbank>"
objConn.Open strConn
set rs = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM Personen " & _
"WHERE (Aktiv=1) " & _
"ORDER BY Nachname"
rs.Open strSQL, objConn, adOpenStatic, adLockOptimistic
Man beachte beim Öffnen des Recordset, das ein statischer Cursortyp eingesetzt
wird, denn sonst kann keine interne Bookmark-Verwaltung stattfinden, denn nichts
anderes passiert, wenn man einen Recordset in "Seiten" aufteilt.
Den bereits geöffneten Recordset weisen wir nun mit der Zuweisung einer Zahl
zur PageSize-Eigenschaft an, zuletzt Genanntes zu
tun.
rs.PageSize = 25
rs.AbsolutePage = 1
Durch Abfrage der Eigenschaft PageCount ergibt
sich, dass der Recordset nun in 14 Seiten aufgeteilt ist. Durch Zuweisung des
Wertes 1 zur Eigenschaft AbsolutePage wird festgelegt
dass die erste "Seite" bearbeitet werden soll. Diese Untergruppe des Recordsets
kann man nun mit einer Schleife durchlaufen:
for i = 1 to rs.PageSize
... Verarbeitung des Datensatzes
rs.movenext
if rs.EOF then exit for
next
rs.close
Set rs = nothing
objConn.close
Set objConn = nothing
Wichtig ist, dass die Schleife nach dem Zugriff auf den letzten Datensatz
verlassen wird.
Das einzige was nun fehlt ist eine Seitennavigation, mit der die einzelnen
Seiten abgerufen werden können. Am sinnvollsten ist die Übergabe eines Page-Parameters
an die ASP-Seite, dessen Wert der Eigenschaft AbsolutePage
zugewiesen werden kann. Ein Verfahren zur Standardisierung eines solchen Navigators
wird im zweiten Teil des Artikels vorgestellt.