In einem weiteren Beitrag namens „Registryeinträge für VBA-Anwendungen“ (www.access-im-unternehmen.de/1508) haben wir dir grundlegenden Techniken für das Speichern von Anwendungsdaten in der Registry vorgestellt. Im vorliegenden Beitrag gehen wir noch einen Schritt weiter und vereinfachen diesen Vorgang, sodass die Befehle zum Lesen und Schreiben der Daten noch einfacher werden. Das Verwalten von Informationen wie beispielsweise von Anwendungsdaten in der Registry ist eine Alternative zum Verwenden einer Optionentabelle oder auch einer Textdatei im Anwendungsverzeichnis. Je nachdem, an wie vielen Stellen man lesend oder schreibend auf diese Daten zugreift, möchte man den Zugriff auf die Registry möglichst einfach gestalten. Dazu stellen wir nachfolgend ein paar geeignete Werkzeuge vor.
Die im obigen Artikel vorgestellten Befehle dienen dazu, Einträge zu erstellen, zu aktualisieren, zu lesen oder zu löschen. Die Befehle zum Schreiben und Lesen der Einträge haben bis zu vier Parameter.
Die ersten beiden davon wiederholen sich vermutlich für die meisten oder sogar für alle Aufrufe.
Die Parameter AppName, Section, Key und Setting braucht man normalerweise zum Anlegen, aber für die Einstellungen einer einzigen Anwendung ist zumindest der Wert für AppName immer gleich. Und wenn die Anwendung nicht allzu umfangreich ist, sodass man mehrere Bereiche für die Registry-Einträge benötigt, verwendet man auch immer den gleichen Namen für den Parameter Section.
In der Lösung dieses Beitrag machen wir nicht viel mehr, als für die immer gleich bleibenden Parameter Konstanten zu definieren und diese immer automatisch zu übergeben, wenn wir eine Einstellung vornehmen oder auslesen wollen. Außerdem müssen wir natürlich, um die Handhabung wirklich zu vereinfachen, noch ein paar neue Funktionen um die eigentlichen Aufrufe bauen, damit wir tatsächlich nur die notwendigsten Daten angeben müssen.
Also legen wir in einem neuen, leeren Modul namens mdlRegistryApp zunächst einmal die folgenden beiden Konstanten an und hinterlegen für diese gleich die entsprechenden Werte:
Public Const cStrAppName As String = "MeineAnwendung" Public Const cStrSection As String = "MeinAnwendungsbereich"
Einfaches Schreiben in die Registry
Die einfachere der beiden Funktionen zum Schreiben und Lesen ist die zum Schreiben von Daten in die Registry. Hier brauchen wir neben AppName und Section einfach nur den Namen des Schlüssels und den Wert als Parameter anzugeben. Also bauen wir eine Funktion namens SaveAppSetting, die nur noch die Parameter strKey und strSetting entgegennimmt und damit und mit den Werten der beiden Konstanten den Aufruf der Anweisung SaveSetting durchführt:
Public Sub SaveAppSetting(strKey As String, _ strSetting As String) SaveSetting cStrAppName, cStrSection, strKey, strSetting End Sub
Wenn wir zum Beispiel drei Werte in die Registry schreiben wollen, erledigen wir das mit der folgenden Beispielprozedur. Diese ruft einfach nur drei Mal die Prozedur SaveAppSetting auf und übergibt Schlüssel und Wert:
Public Sub Test_SaveAppsetting() SaveAppSetting "Mein Schlüssel", "Mein Wert" SaveAppSetting "Noch ein Schlüssel", "Noch ein Wert" SaveAppSetting "Letzter Schlüssel", "Letzter Wert" End Sub
Das Ergebnis können wir in der Registry im Zweig Computer\HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MeineAnwendung\MeinAnwendungsbereich betrachten (siehe Bild 1).
Bild 1: Frisch angelegte Registryschlüssel
Einfaches Lesen aus der Registry
Nun wollen wir diese Werte auch noch auf einfache Weise auslesen. Dazu erstellen wir eine weitere Prozedur namens GetAppSetting.
Diese verwendet die folgenden drei Parameter:
- strKey: Erwartet den Namen des Schlüssels des auszulesenden Wertes.
- strDefault: Erwartet einen Standardwert, der zurückgegeben werden soll, wenn es den mit strKey angegebenen Schlüssel noch nicht gibt.
- bolSaveIfNotExists: Wenn der Schlüssel noch nicht vorhanden oder leer ist, kann GetAppSetting diesen auch direkt anlegen. Dazu stellt man diesen Parameter auf True ein.
Die Prozedur finden wir in Listing 1.
Public Function GetAppSetting(strKey As String, Optional strDefault As String = "", Optional bolSaveIfNotExists As _ Boolean) As String Dim strTemp As String If bolSaveIfNotExists Then strTemp = GetSetting(cStrAppName, cStrSection, strKey) If Len(strTemp) = 0 Then SaveSetting cStrAppName, cStrSection, strKey, strDefault strTemp = strDefault End If Else strTemp = GetSetting(cStrAppName, cStrSection, strKey, strDefault) End If GetAppSetting = strTemp End Function
Listing 1: Prozedur zum Auslesen eines Registrywertes
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