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
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