Daten in Properties verstecken

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Daten schreibt man in einer Datenbank üblicherweise in die Datensätze der enthaltenen Tabellen. Manchmal möchten Sie aber vielleicht wichtige Informationen, die nicht zu den vom Benutzer verwendeten Daten gehören, versteckt unterbringen. Ein gutes Beispiel dafür ist das Datum der ersten Anwendung einer Datenbank, für die der Benutzer nur über einen bestimmten Zeitraum benutzen darf. Dieser Artikel zeigt, wo Sie solche Daten unterbringen können und wie Sie diese wieder abrufen.

Datenbank-Properties

Die erste Möglichkeit, Daten vor herkömmlichen Benutzern zu verstecken, ist eine einfache Datenbank-Property, also eine Datenbank-Eigenschaft. Diese erreichen Sie über die Auflistung Properties des Database-Objekts. Wenn Sie alle Datenbank-Eigenschaften der aktuellen Datenbank ausgeben möchten, nutzen Sie dazu die Auflistung Properties des mit CurrentDb ermittelten Database-Objekts. Diese können Sie beispielsweise mit der folgenden Prozedur durchlaufen und im Direktbereich ausgeben lassen:

Public Sub GetAllProperties()
     Dim prp As DAO.Property
     Dim db As DAO.Database
     Set db = CodeDb
     For Each prp In db.Properties
         Debug.Print prp.Name,
         On Error Resume Next
         Debug.Print prp.Value
         If Not Err.Number = 0 Then
             Debug.Print "<Error>"
         End If
         On Error GoTo 0
     Next prp
End Sub

Gegebenenfalls tritt bei manchen Eigenschaften ein Fehler auf, den wir hier durch die Ausgabe von umgehen. Das Ergebnis sieht beispielsweise wie in Bild 1 aus.

Ausgabe der Properties einer Datenbank

Bild 1: Ausgabe der Properties einer Datenbank

Benutzerdefinierte Eigenschaft setzen

Wenn Sie eine eigene Eigenschaft setzen wollen, können Sie die folgende Prozedur nutzen. Diese erwartet als Parameter den Namen der zu setzenden/zu erzeugenden Eigenschaft sowie den Wert, den diese Eigenschaft annehmen soll. Wie Sie dem vorherigen Satz entnehmen können, prüft diese Prozedur indirekt, ob die Eigenschaft bereits vorhanden ist und legt diese nur an, falls dies nicht der Fall ist.

Die Prozedur deklariert ein Database– und ein Property-Element und füllt das Database-Objekt mit der Funktion CurrentDb. Danach versucht sie dem Element der Properties-Auflistung des aktuellen Database-Objekts mit dem Namen aus strProperty den Wert strValue zuzuweisen. Ist diese Eigenschaft bereits vorhanden, gelingt dies ohne Probleme. Anderenfalls löst dies den Fehler mit der Nummer 3270 aus. Da wir für den Fall eines Fehlers einen Sprung zu der Marke Fehler vorgesehen haben, springt die Prozedur zu dieser Stelle und prüft, ob der ausgelöste Fehler die Fehlernummer 3270 aufweist.

Falls ja, steht fest, dass die gewünschte Eigenschaft schlicht noch nicht vorhanden ist und wir diese zunächst anlegen müssen. Das erledigen wir mit zwei Anweisungen. Die erste legt die neue Eigenschaft mit der CreateProperty-Methode an, wobei wir dieser den Namen, den Typ (dbText) und den Wert als Parameter übergeben. Anschließend hängen wir die Eigenschaft mit der Append-Methode an die Liste der Eigenschaften der Datenbank an (db.Properties.Append). Außerdem aktualisieren wir die Liste der Eigenschaften mit der Refresh-Methode:

Public Sub SetProperty(strProperty As String, _
         strValue As String)
     Dim db As DAO.Database
     Dim prp As DAO.Property
     On Error GoTo Fehler
     Set db = CurrentDb
     db.Properties(strProperty) = strValue
Ende:
     On Error Resume Next
     Exit Function
Fehler:
     If Err.Number = 3270 Then
         Set prp = db.CreateProperty(strProperty, _
             dbText, strValue)
         db.Properties.Append prp
         db.Properties.Refresh
     End If
     Resume Ende
End Sub

Die Prozedur können wir auch etwas umformulieren:

Public Function SetProperty(strProperty As String, _
         strValue As String)
     Dim db As DAO.Database
     Dim prp As DAO.Property
     Set db = CurrentDb
     On Error Resume Next
     Set prp = db.CreateProperty(strProperty, _
         dbText, strValue)
     db.Properties.Append prp
     db.Properties.Refresh
     If Not Err.Number = 0 Then
         db.Properties(strProperty) = strValue
     End If
End Function

In diesem Fall deaktivieren wir zunächst die Fehlerbehandlung und versuchen, die Eigenschaft neu zu erstellen und direkt zu füllen. Gelingt dies nicht, wird ein Fehler ausgelöst. Deshalb prüfen wir gleich im Anschluss, ob ein Fehler ausgelöst wurde. Falls ja, können wir davon ausgehen, dass die Eigenschaft bereits vorhanden ist und fügen den Wert durch einfache Zuweisung an db.Properties(strProperty) hinzu.

Eigenschaft auslesen

Das Auslesen einer speziellen Eigenschaft erfordert von der dafür vorgesehen Funktion wieder die Angabe eines Parameters, nämlich des Namens der auszugebenden Eigenschaft. Die folgende Funktion ermittelt bei deaktivierter Fehlerbehandlung den Wert der mit dem Parameter strProperty angegebenen Eigenschaft. Ist diese nicht vorhanden, liefert die Funktion eine leere Zeichenkette zurück:

Public Function GetProperty(strProperty As String) As String
     Dim prp As DAO.Property
     Dim db As DAO.Database
     Set db = CurrentDb
     On Error Resume Next
     Set prp = db.Properties(strProperty)
     On Error GoTo 0
     If Not prp Is Nothing Then
         GetProperty = prp.Value
     End If
End Function

Daten per Fernzugriff ermitteln

Nun kann der Benutzer allerdings, selbst wenn Sie die Datenbank in eine .mde oder .accde umgewandelt haben, von anderen Datenbanken aus auf die Eigenschaften der Datenbank zugreifen. Dazu versehen wir die Prozedur GetAllProperties mit einem Parameter, nämlich einem Verweis auf die zu untersuchende Datenbank:

Public Sub GetAllProperties(db As DAO.Database)
     Dim prp As DAO.Property
     For Each prp In db.Properties
         Debug.Print prp.Name,
         On Error Resume Next
         Debug.Print prp.Value
         If Not Err.Number = 0 Then
             Debug.Print "<Error>"
         End If
         On Error GoTo 0
     Next prp
End Sub

Danach können Sie die Eigenschaften einer anderen Datenbank mit der folgenden Prozedur auslesen. Dazu tragen Sie einfach für die Variable strPfad den Pfad zu der gesuchten Datenbank ein:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar