Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Ein Gästebuch in ASP erstellen - Teil 2

Geschrieben von: Christoph Wille
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

Willkommen zum zweiten Teil der Erstellung eines Gästebuchs mit ASP und ADO. Heute beschäftigen wir uns damit, möglichst effizient (das heißt schnell) die Einträge des Gästebuchs in einer Liste darzustellen. Damit sie eine Idee bekommen, wie es am Ende aussehen soll, hier ein Screenshot der fertigen Seite:

Eintragsseite

Wie sie sehen, enthält die Seite 2 identische Navigationsleisten (oben und unten auf der Seite angeordnet), die in hellgelb gehalten sind. Diese zeigen - je nach Verfügbarkeit als Hyperlink ausgeführt - folgende Navigationsbefehle: 10 zurück, Anfang, nächsten 10. Um die Mehrfachanzeige der Navigationsleisten zu erleichtern, habe ich sie in einer Funktion implementiert - mehr dazu später.

Weiters sehen sie einen Eintrag, der die gespeicherten Informationen ausgibt: Name und Emailadresse, die jeder Benutzer eingeben muß, sowie die freiwillig anzugebenden Felder Homepage und Kommentar. Von den automatisch erfassten Werten wird der Browser, das Betriebssystem und das Eintragsdatum ausgegeben. Die Ausgabe ist auch in einer Funktion implementiert und wird für jeden Datensatz aufgerufen.

Zuletzt bleibt noch der blaue Balken: hier wird die Anzahl der Einträge insgesamt ausgegeben.

Implementierung des Pagings

In vielen Büchern über ASP oder ADO findet sich eine Technik des Pagings (seitenweises Durchblättern eines großen Recordsets), die nicht sehr effizient ist: die PageSize/AbsolutePage Technik (beides sind Methoden des Recordset Objekts). Bei dieser Technik wird das Recordset geöffnet, die Anzahl der Records pro Seite mit PageSize angegeben, und dann mit AbsolutePage auf die gewünschte Seite gesprungen. Dabei werden sehr viele Records unnötig ausgelesen, und zwischen Datenbank(server) und Webserver ein ebensolcher Traffic erzeugt.

Nun da ich mich so negativ über diesen Ansatz geäußert habe, muß ich wohl eine bessere Technik anzubieten haben: der TOP Ansatz. Dabei handelt es sich um das TOP Schlüsselwort eines SELECT Statements, und im Grunde macht es nichts anderes, als nur die TOP x Records einer SELECT Abfrage auch tatsächlich zu liefern - zB 10 von 10.000 die aufgrund des WHERE Statements geholt werden müßten.

Und so sieht eine TOP Abfrage aus:

SELECT TOP 10 IdField,Name,EmailAddress,Homepage,
	Browser,OperatingSystem,EntryDate,Comment 
	FROM Guestbook 
	ORDER BY IdField DESC
Dieses Statement holt die ersten 10 Einträge des Gästebuchs, und zwar die neuesten zuerst (absteigende Sortierordnung wird zuerst durchgeführt). Der 11te Record verläßt den Datenbankserver nicht.

Das Zusammenbauen der SQL Statements für das Paging (Start, Next, Prev) wird in den Zeilen 13 bis 35 durchgeführt (Listing). Die Statementteile sind in Konstanten definiert, und der Grund für das explizite Anführen der einzelnen Spalten ist der, daß ich mich damit von Änderungen an der Tabelle unabhängig mache.

Obwohl ich nur 10 Einträge (und nur genau 10 Einträge maximal) von der Datenbank abhole, gibt es noch eine weitere Möglichkeit, die Datenbankzugriffe zu beschleunigen: die GetRows Methode (Zeilen 42-46). Damit werden die Zeilen des Recordsets in ein Array kopiert, und ich kann das Recordset schließen und somit Resourcen auf der Datenbank freigeben (Cursor, etc). Aber auch auf der ASP-Seite hole ich mir Geschwindigkeit, da ich auf kein Objekt mehr zugreife, sondern auf einen Speicherblock.

Ermitteln der Anzahl der Einträge

Um die Gesamtanzahl der Einträge in das Gästebuch zu ermitteln, habe ich eine UNION Abfrage qSummaries in die Datenbank eingefügt:

SELECT COUNT(*) FROM Guestbook
UNION ALL
SELECT MAX(IdField) FROM Guestbook
UNION ALL SELECT MIN(IdField) FROM Guestbook;
Die erste Zeile ermittelt die Anzahl der Einträge (das gewünschte Ziel), aber ich hole noch 2 Zeilen: den Wert von IdField für den letzten sowie ersten Eintrag. Diese Informationen verwende ich wieder für die Navigationsleisten. Nach dem Auslesen mittels ADO (52-58) kann ich die Datenbankverbindung nun endgültig schließen (Zeile 61ff).

Darstellen der Einträge

Das "Hauptprogramm" dieser ASP Seite (entries.asp) befindet sich in den Zeilen 66 bis 94. Hier korrigiere ich mit der Variable bTopDown die Sortierreihenfolge aus den Abfragen, was mit der TOP Abfrage leider auch einhergeht - damit der Trick mit maxmimal 10 Einträgen funktioniert, müssen die vorhergehenden 10 Einträge in der falschen Reihenfolge sortiert werden (siehe auch das SELECT Statement).

Die Zeilen 83 und 87 rufen WriteRecord auf, eine Funktion die in den Zeilen 96 bis 121 implementiert ist. Wer das Aussehen seines Gästebuchs verändern möchte, muß hier seine Veränderungen vornehmen. An die Funktion wird das Array mit den Records übergeben, ebenso wie der Index des Records, der ausgegeben werden soll. Da Variablen standardmäßig per Referenz übergeben werden, entsteht auch hier kein Geschwindigkeitsverlust.

Die Navigationsleisten

Zuletzt bleibt noch die Navigationsleiste zu erklären. Diese ist ebenso wie WriteRecord als Funktion implementiert, und zwar unter dem Namen WritePagingHeaders. Das Besondere an dieser Funktion ist, daß ich hier VBScript und HTML mische (123 bis 155). Aber beides (VBScript, HTML) ist das Resultat, das beim Aufruf der Funktion an den Browser geschickt wird.

Speziell hinweisen möchte ich hier noch auf die Variablen nPrevPaging und nLastPaging. Diese enthalten jeweils den ersten sowie letzten Eintrag der aktuell angezeigten Seite - deshalb auch in den SELECT Abfragen die < und > Bedingungen für IdField (und nicht etwa <=). Last but not least erfüllen hier auch nTotalMax und nTotalMin ihren Zweck, weil vorwärts und rückwärts pagen nur dann erlaubt wird, wenn es auch tatsächlich noch Records zum Anzeigen gibt!

Damit wäre ich am Ende für heute, und wünsche ihnen viel Spaß beim Ausprobieren des Sourcecodes, und ich hoffe wir lesen uns wieder beim 3 und letzten Artikel der Gästebuchserie.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000403.zip

Verwandte Artikel

Ein Gästebuch in ASP erstellen - Teil 1
http:/www.aspheute.com/artikel/20000331.htm
Ein Gästebuch in ASP erstellen - Teil 3
http:/www.aspheute.com/artikel/20000404.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.