Metadaten einer Anwendung

Egal, ob man eine Datenbank oder irgendeine andere Anwendung erstellt: Es ist meistens notwendig, verschiedene Metadaten zu speichern. So ist es z. B. sinnvoll, die Programmversion zu kennen, damit man bei späteren Updates nachvollziehen kann, welche Version(en) gerade genutzt werden, oder man gibt dem User die Möglichkeit individueller Einstellungen. 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 im ersten Moment anzubieten, 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 eine derartige Tabelle einmal an:

tblMetadaten
IDMeta txtSchlüssel txtWert
1 Version 2
2 VersionsDatum 28.1.2018
3 Design Larissa

Schon auf den ersten Blick sollte auffallen, dass die Werte immer in einem Textfeld gespeichert werden müssen, denn nur in einem Textfeld können die unterschiedlichsten Felddatentypen gespeichert werden. Das widerspricht natürlich dem Grundgedanken einer Datenbank. Gleiches gilt für den Umstand, dass die Tabelle zwingend eine exakt definierte Anzahl von Datensätzen enthalten muss. Außerdem besteht, wenigstens theoretisch, die Gefahr, dass bei einer Änderung nicht der Wert, sondern die Schlüsselbezeichnung geändert wird und ein Eintrag damit nicht mehr zu gebrauchen wäre. Die Auflistung der Probleme ist damit noch längst nicht abgeschlossen. Es gibt allerdings zwei Alternativen, 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 leicht ermitteln kann:

Sub Eigenschaften()
Dim prop As DAO.Property

'Der Wert mancher Eigenschaften lässt sich nicht ausgeben
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 „Version“ mit dem Wert 1. Gleich darauf wird der Wert auf 2 gesetzt.

Currentdb.Properties.Append CurrentDB.CreateProperty("Version", dbInteger, 1)
Currentdb.Properties("Version") = 2

Registry

Properties werden in der Datei selbst gespeichert. Das ist sinnvoll für Werte, die die Datei selbst betreffen. Andererseits kann es aber auch Werte geben, die den aktuellen User 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 an, 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 genutzt 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", "Larissa"
strDesign = GetSetting("MeineAccessApp", "Designs", "Design")