Einsatz des Recordset Objektes als Multifunktionaler Datenspeicher
Geschrieben von: Christian Koller Das ADO Recordset Object (ADODB.Recordset) ist nicht nur geeignet, um Ergebnisse von Datenbankabfragen zu speichern. Man kann es auch Anstelle eines Arrays benutzen um komplexe Datensätze in ASP Seiten zu speichern und zu verwalten. Durch die Konzeption des ADO Recordsets als Objekt mit Eigenschaften und Methoden hat man einen einfachen und komfortablen Zugriff auf die gespeicherten Daten. Unter anderem bietet jedes Recordset Objekt von Haus aus die Möglichkeit nach bestimmten Werten zu suchen, Werte zu sortieren, Datensätze hinzuzufügen oder wieder zu löschen. Mit der ADO Version 2.1 ist es sogar möglich, alle Daten eines Recordsets als XML auf einer Festplatte oder Diskette zu speichern. Damit kann das Recordset per Email oder Download verschickt werden. Im XML Format bleiben nicht nur die Daten erhalten, auch die komplette Recordsetstruktur wird im XML Dokument gespeichert. All dies macht das Recordset zu einem wertvollen und praktischen Datenspeicher, der auch in ASP Applikationen gute Dienste leisten kann. Um ein Recordset Objekt als Datenspeicher zu nutzen, muss man es erstellen (CreateObject), und dann die Struktur eines Datensatzes definieren. Ein Datensatz besteht dabei aus Feldern mit Feldnamen und Datentyp (Text, Zahl, Datum). Das folgende Beispiel erstellt ein ADO Recordset Objekt und speichert es in der Variable rs. Danach definiert es die Felder des Recordsets und legt sowohl Namen als auch Datentyp fest:
Um nun die Felder des Recordsets zu definieren benutzt man die Append Methode der Fields Collection. Die Fields Collection enthält alle Felder des Recordsets, und mit Hilfe der Append Method kann man neue Felder zur Fields Collection, und damit zum Recordset, hinzufügen: ' Definition der ADO Datentypen (DataTypeEnum) Const adBinary = 128 ' Daten Const adBoolean = 11 ' Boolean (True/False) Const adChar = 129 ' Text Const adCurrency = 6 ' Waehrung Const adDate = 7 ' Datum Const adDecimal = 14 ' Exakte Dezimalzahl Const adDouble = 5 ' Fliesskommazahl hoher Genauigkeit Const adInteger = 3 ' Ganze Zahl Const adSingle = 4 ' Fliesskommazahl niedriger Genauigkeit ' Erstellen des Recordset Objektes Set rs = CreateObject("ADODB.Recordset") ' Definition der Datenstruktur des Recordsets ' rs.Fields.Append Name, Datentype, Laenge, Attribute rs.Fields.Append "ID", adInteger rs.Fields.Append "Name", adChar, 64 rs.Fields.Append "Notiz", adChar, 2048 Nachdem nun die Struktur des Recordsets in Form der Felder (Name und Datentyp) feststeht, kann man daran gehen, das Recordset mit Werten zu füllen. Zu diesem Zweck öffnet man das Recordset mit der Open Methode und fügt mit der AddNew Methode neue Datensätze hinzu: ' Oeffnen des Recordsets um Daten darin zu speichern rs.Open ' Datensaetze in Recordset speichern rs.AddNew rs("ID") = 1 rs("Name") = "Christian" rs("Notiz") = "Dies ist eine sehr lange Notiz " & Space(900) & "!" rs.AddNew rs("ID") = 2 rs("Name") = "Stefan" rs("Notiz") = "Dies ist eine weitere, sehr lange Notiz " & Space(900) & "!" rs.AddNew rs("ID") = 3 rs("Name") = "Guenter" rs("Notiz") = "Dies ist eine kurze Notiz !" Um Werte aus dem Recordset wieder auszulesen navigiert man den Recordset Cursor zum gewünschten Datensatz und liest dann die Werte der Felder aus. Das folgende Skript zum Beispiel geht zum zweiten Datensatz (rs.AbsolutePosition = 2) und gibt die Werte der 3 Felder des Datensatzes aus: ' Zum 2. Datensatz gehen und alle Felder ausgeben: Response.Write "Werte des zweiten Datensatzes:<br>" & VbCrLf rs.AbsolutePosition = 2 Response.Write rs("ID") & " " & rs("Name") Response.Write "(" & rs("Notiz") & ")<br>" & VbCrLf Response.Write "<br>" & VbCrLf Um alle Datensätze des Recordsets zu durchlaufen, verwendet man üblicherweise eine While...Wend Schleife: ' Gesamtes Recordset ausgeben: Response.Write "Inhalt des Recordsets:<br>" & VbCrLf rs.MoveFirst While Not rs.EOF Response.Write rs("ID") & " " Response.Write rs("Name") & "<br>" & VbCrLf rs.MoveNext Wend Response.Write "<br>" & VbCrLf Die Anzahl der Datensätze im Recordset Objekt ist in der RecordCount Eigenschaft des Recordsets enthalten: ' Anzahl der Datensaetze: Response.Write "Recordset enthaelt " & rs.RecordCount & " Datensaetze.<br>" Response.Write "<br>" & VbCrLf Darüber hinaus erlaubt das Recordset Objekt noch fortgeschrittene Operationen, wie das Sortieren aller Datensätze, das Finden einzelner Daten, oder das Filtern des gesamten Recordsets. Um alle Datensätze des Recordsets zu sortieren, weist man der Sort Eigenschaft des Recordset Objektes die Sortierkriterien zu. Die Sortierkriterien enthalten den Namen der Datensatzspalte, nach der sortiert werden soll, und den Zusatz ASC (für aufsteigend) oder DESC (für absteigend). ' Recordset sortieren und ausgeben Response.Write "Recordset, sortiert nach Namen und ID:<br>" & VbCrLf ' Name absteigend (DESC) und ID aufsteigend (ASC) sortieren: rs.Sort = "Name DESC, ID ASC" rs.MoveFirst While Not rs.EOF Response.Write rs("ID") & " " Response.Write rs("Name") & "<br>" & VbCrLf rs.MoveNext Wend ' Sortierung aufheben rs.Sort = "" Response.Write "<br>" & VbCrLf Das Filtern eines Recordset wird durch die Filter Methode ermöglicht. Nach dem Filtern sind im Recordset nur mehr jene Datensätze sichtbar, die dem Filterkriterium genügen. Das Filterkriterium ist in diesem Fall ein Ausdruck aus Feldnamen, Operatoren (wie "=", "<", ">", LIKE, AND, OR) und Vergleichswerten: ' Recordset filtern und ausgeben Response.Write "Gefiltertes Recordset:<br>" & VbCrLf rs.Filter = "((ID > 1) AND (Name > 'G')) OR " & _ "((Name LIKE '%ist%') AND (ID > 1))" rs.MoveFirst While Not rs.EOF Response.Write rs("ID") & " " Response.Write rs("Name") & "<br>" & VbCrLf rs.MoveNext Wend ' Filter entfernen rs.Filter = 0 Response.Write "<br>" & VbCrLf Wenn man Datensätze mit ganz bestimmten Datenwerten sucht, so nimmt man die Find Methode zu Hilfe. Diese sucht im gesamten Recordset bis es den ersten Datensatz findet, der das Suchkriterium erfüllt: ' Finden eines Datensatzes und Löschen des selbigen: Response.Write "Suchen des Datensatzes mit der ID = 2.<br>" & VbCrLf rs.MoveFirst rs.Find "ID = 2" If Not rs.EOF Then ' Datensatz gefunden, daher loeschen: rs.Delete rs.MoveFirst Response.Write "Datensatz geloescht.<br>" & VbCrLf End If Response.Write "<br>" & VbCrLf Wie das vorherige Beispiel bereits zeigt, kann man nicht mehr benötigte Datensätze einfach mit der Delete Methode löschen wenn der Recordset Cursor auf den zu löschenden Datensatz zeigt. Sobald man das Recordset Objekt nicht mehr zum Speichern benötigt schließt man es mit der Close Methode und gibt seine Resourcen frei. ' verbliebene Datensaetze ausgeben: Response.Write "Verbliebene Datensaetze:<br>" & VbCrLf rs.MoveFirst While Not rs.EOF Response.Write rs("ID") & " " Response.Write rs("Name") & " (" Response.Write rs("Notiz") & ")<br>" & VbCrLf rs.MoveNext Wend ' Recordset schliessen und Resourcen freigeben rs.Close Set rs = Nothing Das Recordset bietet also beim Speichern von Daten eine interessante Alternative zu Arrays, da es Such- und Sortieralgorithmen quasi nebenbei zur Verfügung stellt. Speziell für Datenbank-Programmierer mit Erfahrung unter ADO ist das Recordset Objekt oftmals ein einfach zu handhabender Datenspeicher für eine überschaubare Menge von Datensätzen. Einen weiteren Vorteil in der Handhabung ist die Möglichkeit (ab ADO Version 2.1), daß man ein Recordset (inklusive Daten, Struktur und Feld-Definitionen) als XML auf einer Festplatte, einer Floppy, in einer Application- oder Session-Variblen speichern kann. Um ein generiertes Recordset als XML auf der Festplatte zu speichern, führt man die Save Methode wie folgt aus: Const adPersistXML = 1 ' Speichern des Recordsets auf der Harddisk: rs.Save "A:\Data\MyRecordsetData.xml", adPersistXML Das Auslesen eines als XML gespeicherten Recordset ist ähnlich einfach: ' Auslesen rs.Open "A:\Data\MyRecordsetData.xml" ... Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
ADO und ASP - Datenbanken einmal näher betrachtet Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |