Metadaten einer Anwendung

Üblicherweise müssen in einer Anwendung auch verschiedene Metadaten gespeichert werden. So ist es z. B. sinnvoll, die Programmversion zu speichern, damit man bei späteren Updates nachvollziehen kann, welche Version(en) gerade genutzt werden, oder man gibt dem User die Möglichkeit, individuelle Einstellungen vorzunehmen. Solche Informationen haben zunächst einmal nichts mit der eigentlichen Anwendung zu tun, müssen aber irgendwie gespeichert werden.

In Microsoft Access scheint es sich zunächst naheliegend, dafür eine eigene Tabelle zu erstellen, die mit der übrigen Datenbank nichts zu tun hat. Das ist in der Tat eine Möglichkeit, die allerdings etliche Fallstricke und Schwächen aufweist. Zur Verdeutlichung schauen wir uns so eine Tabelle einmal an:

tblMetadaten
IDMeta txtSchlüssel txtWert
1 Version 2.0
2 VersionsDatum 28.01.2022
3 Design Dunkel
4 Nutzername Sheldon
5 Berechtigung Standard

Man sieht, dass die Werte zwar unterschiedliche Datentypen haben, aber in einem Textfeld abgelegt werden müssen, weil es nur ein einziges Feld für die Werte gibt. Des weiteren muss die Tabelle zwingend eine exakte Anzahl von Datensätzen enthalten, nämlich einen für jeden erforderlichen Schlüssel. Außerdem besteht, zumindest theoretisch, die Gefahr, dass bei einer Änderung nicht der Wert, sondern die Schlüsselbezeichnung geändert wird und ein Eintrag somit nicht mehr verwendbar wäre. Die Auflistung der Probleme ist damit noch längst nicht abgeschlossen.

Gut, dass es zwei Alternativen gibt, die für Metadaten sinnvoller sind als eine Tabelle. Welche davon man verwenden sollte, oder beide in Kombination, hängt von der Art der Metadaten ab.

Properties

Auch Access selbst speichert verschiedene Metadaten, die man sich leicht anzeigen kann, indem man die folgende Prozedur ausführt:

Sub Eigenschaften()
Dim prop As DAO.Property

'Die Fehlerbehandlung überspringt nicht ausdruckbare Eigenschaften
On Error Resume Next

For Each prop In CurrentDb.Properties
    Debug.Print prop.Name, prop.Value
Next

End Sub

Diese Eigenschaftenliste kann man um eigene Eigenschaften erweitern. Dabei kann man auch den Datentyp einer jeden Eigenschaft festlegen. Das folgende Beispiel erstellt eine Integereigenschaft namens „VersionsNr“ mit dem Wert 1. Gleich darauf wird der Wert auf 2 gesetzt.

CurrentDb.Properties.Append CurrentDb.CreateProperty("VersionsNr", dbInteger, 1)
CurrentDb.Properties("VersionsNr") = 2

Registry

Properties werden in der Datei selbst gespeichert. Das ist sinnvoll für Werte, die auch tatsächlich die Datei selbst betreffen. Andererseits kann es auch Werte geben, die den aktuellen Nutzer betreffen. Die Versionsnummer betrifft beispielsweise die Datei, aber wenn der User individuelle Einstellungen vornehmen kann, wie etwa die Auswahl individueller Farbdesigns, sollten seine Einstellungen auch nach einem Update erhalten bleiben.

Dafür bietet VBA die Möglichkeit, Werte in die Registry zu schreiben. Mit den Befehlen SaveSetting, GetSetting und GetAllSettings können Einträge unter HKEY_CURRENT_USER\Software\VB and VBA Program Settings vorgenommen werden. Sie sind auf den User bezogen und wenn sie nicht mit DeleteSetting gelöscht werden, bleiben sie erhalten, selbst wenn die Accessanwendung gelöscht wird.

SaveSetting "MeineAccessApp", "Designs", "Design", "Dunkel"
strDesign = GetSetting("MeineAccessApp", "Designs", "Design")