Zuletzt verwendete Datensätze anzeigen

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.

missing image file

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.

missing image file

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

Schreibe einen Kommentar