Sie kennen sicherlich die Funktion aus dem Office-Ppaket, die Ihnen immer die letzten verwendeten Dokumente im Menü anbietet. Diese Funktionalität hat den charmanten Vorteil, dass Sie diese Dateien nicht in der Verzeichnisstruktur Ihrer Festplatte suchen müssen, sondern direkt darauf zugreifen können. Dieses Prinzip namens Most Recent Used (MRU) soll im nachfolgenden Programmierbeispiel für Kundendaten verwendet werden.
Das Fallbeispiel
In der Beispieldatenbank MRU2000.mdb finden Sie alle in diesem Artikel beschriebenen Objekte und Codierungen. Öffnen Sie in der Beispieldatenbank das Formular frmStammdaten, über das Sie Firmendaten verwalten können (siehe Bild 1). Links von den eigentlichen Daten befindet sich ein Listenfeld, in dem alle Datensätze angezeigt werden, die über Suchen ermittelt wurden oder an deren Stammdaten änderungen vorgenommen worden sind.
Bild 1: Verwaltungsformular für Unternehmensdaten
Geben Sie in das Textfeld Suchen einen beliebigen Suchbegriff für ein Unternehmen ein. Als Platzhalter für eine beliebige Zeichenkette kann das Sternchen (*) verwendet werden. Sobald Sie den zu suchenden Begriff eingegeben haben, bestätigen Sie den Eintrag mit der Eingabetaste und anschließend öffnet sich ein Dialog, in dem alle dem Suchmuster entsprechenden Unternehmen angezeigt werden (siehe Bild 2). Um zum gewünschten Datensatz zu navigieren, klicken Sie entweder doppelt auf den Namen im Listenfeld oder Sie markieren den Datensatz und bestätigen anschließend Ihre Auswahl mit Auswählen. Sobald der Dialog geschlossen wird und das aufrufende Formular zum ausgewählten Datensatz navigiert, erscheint der von Ihnen ausgewählte Datensatz in der Liste der zuletzt verwendeten Datensätze und Sie müssen nun nicht mehr mühsam über den Suchdialog zu diesem Datensatz navigieren.
Bild 2: Dem Suchkriterium entsprechende Datensätze
Eine weitere Möglichkeit der Übernahme eines Datensatzes in die MRU besteht darin, einen existierenden Datensatz zu ändern. Sobald die änderungen an einem Datensatz gespeichert wurden, wird dieser Datensatz ebenfalls in die MRU übernommen.
Technische Umsetzung
Um eine MRU zu programmieren, bedarf es nicht viel Aufwands. Auf Basis der Datenstruktur benötigen Sie zwei Tabellen zur Steuerung der MRU.
tblMRU
Die wichtigste Tabelle für die Speicherung der letzten Datensätze ist die Tabelle tblMRU. Ihre Aufgabe ist es, den Primärschlüssel der Unternehmensdaten nebst Datum des Eintrags zu speichern (s. Tab. 1).
Feld |
Beschreibung |
Tab. 1: Aufbau der Tabelle tblMRU
Sobald ein neuer Eintrag in der Tabelle vorgenommen wird, wird das Datum automatisch durch Access hinzugefügt.
tblMRUParameter
Die Tabelle tblMRUParameter dient der Verwaltung der Steuerungsvariablen für die Verwaltung der MRU. Auch diese Tabelle (s. Tab. 2) hat einen recht simplen Aufbau und speichert ausschließlich einen Parameternamen sowie einen Parameterwert.
Feld |
Beschreibung |
Tab. 2: Aufbau der Tabelle tblMRUParameter
Für das obige Beispiel benötigen Sie nur einen einzigen Parameter, der steuert, wie viele Einträge maximal in der MRU gespeichert werden sollen. Dazu dient der Parameter MAX_ENTRIES, der aktuell auf den Wert 25 festgelegt ist.
Es wäre auch möglich, ein Verfallsdatum zu verwenden, indem man die Tage angibt, nach denen ein Eintrag automatisch aus der MRU entfernt werden soll.
Eine Klasse für die Kapselung der Funktion
Die Funktionen der MRU sind in einer Klasse gekapselt, was so eine einfachere Verwaltung und Weiterentwicklung ermöglicht.
Die erste Grundüberlegung für die Funktion ist natürlich der Leistungsumfang. Sie müssen zunächst festlegen, was die Klasse alles leisten soll. Grundsätzlich müssen die Funktionen aus Tab. 3 erfüllt sein.
Funktionalität |
Funktion |
Tab. 3: Basisfunktionalität der MRU
Neben den oben aufgeführten öffentlich zugänglichen Methoden der Klasse werden natürlich auch Hilfsfunktionen benötigt, die Grundfunktionen der Klasse steuern (s. Tab. 4).
Funktionalität |
Funktion |
Tab. 4: Hilfsfunktionen der MRU
Aufbau der Klasse clsMRU
Die oben beschriebene Funktionalität ist in der Klasse clsMRU programmiert. Sie befindet sich in der Beispieldatenbank und kann durch einen Doppelklick im Visual Basis Editor angezeigt und bearbeitet werden.
Für die korrekte Arbeitsweise der Klasse werden Parameter eingesetzt. Damit diese Parameter nicht in jeder Funktion erneut abgerufen werden, speichert die Klasse die Parameterwerte in lokalen Variablen und Konstanten, die während des gesamten Lebenszyklus der Klasse zur Verfügung stehen. Es bietet sich also an, die Parameter für den Gebrauch gleich bei der Initialisierung der Datenklasse auszulesen und zu speichern.
Um Code gleich bei der Initialisierung einer Klasse ausführen zu lassen, verwenden Sie das Ereignis Initialize des Klassenobjektes. Es wird automatisch ausgeführt, sobald Sie auf Methoden und Eigenschaften einer Klasse zum ersten Mal zugreifen. In diesem Beispiel ist die Initialisierung nicht sehr aufwändig, da lediglich die lokale Variable lngNumOfEntries gefüllt wird. Sie speichert den Wert der maximal zu speichernden Einträge in die MRU:
Private Sub Class_Initialize() lngNumOfEntries = _ GetParameterValue("MAX_ENTRIES") End Sub
Der Wert der Variablen wird durch die Funktion GetParameterValue gesetzt. Diese Funktion liest aus der Tabelle tblMRUParameter den Wert zum entsprechenden Parameterdatensatz aus.
Private Function GetParameterValue(strParameter _ As String) As Variant ... Set cmd = New ADODB.Command With cmd Set .ActiveConnection = _ CurrentProject.Connection .CommandText = SQL_MRU_PARAMETER .CommandType = adCmdText Set prm = .CreateParameter("Parameter", _ adVarChar, adParamInput, _ Len(strParameter) + 1, strParameter) .Parameters.Append prm Set rst = .Execute() End With If Not rst Is Nothing Then If Not rst.EOF And rst.BOF Then GetParameterValue = _ rst.Fields(0).Value End If End If ... End Function
Da diese Funktion lediglich innerhalb der Klasse benötigt wird, ist sie als Private deklariert und somit nach außen nicht sichtbar. Der Zugriff auf die Datenstrukturen der Tabellen erfolgt über ADO und OLEDB, aber selbstverständlich können Sie auch mittels DAO die gleiche Funktionalität erreichen. Das Ergebnis der Abfrage wird in einem ADO-RecordSet rst gespeichert und kann anschließend für die weitere Bearbeitung verwendet werden.
If Not rst Is Nothing Then If Not rst.EOF And rst.BOF Then GetParameterValue = rst.Fields(0).Value End If End If
Sollte kein Eintrag gefunden werden, erhalten Sie einen NULL-Wert.
Variablen oder Properties
Wenn Sie sich die Klasse clsMRU etwas genauer anschauen, werden Sie bemerken, dass es in dieser Klasse zwei Properties (TableName und PrimaryKey) gibt. Mithilfe von Properties (Klasseneigenschaften) können Sie außerhalb der Klasse Werte für den Gebrauch der Klasse setzen. Sie können aber auch mithilfe von Properties Werte aus einer Klasse auslesen. Beides ist nur dann möglich, wenn Sie eine öffentliche Property-Eigenschaft deklarieren.
„Warum denn eine Property Eine Variable innerhalb einer Klasse, die als Public deklariert wird, erfüllt doch die gleiche Funktion.“ Das stimmt vollkommen, jedoch haben Variablen eine kleine Einschränkung – Sie können einer Variablen einen Wert zuweisen oder einen Wert abrufen. Sie haben dann jedoch keine Möglichkeit, innerhalb der Klasse etwa die Plausibilität der Zuweisung zu prüfen. Genau das aber ist der große Vorteil von Properties, weil sie gleichzeitig Prozeduren sind. Um einer Property einen Wert zuzuweisen, verwenden Sie das Schlüsselwort Let, und um den Wert einer Eigenschaft abzurufen, das Schlüsselwort Get.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo