 | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Benutzereinstellungen verwalten
Christoph Spielmann, Düsseldorf
Die Verwaltung von Benutzereinstellungen ist - insbesondere beim Einsatz von Access - eine Aufgabe mit vielen Lösungsmöglichkeiten. Dieser Artikel zeigt Ihnen, wie Sie solche Benutzereinstellungen (gleich Optionen) in INI-Dateien, der Windows-Registry oder in Access-Tabellen speichern.
Einsatz von Optionen-Tabellen
Der naheliegendste Weg zum Speichern von Optionen ist sicherlich der Einsatz einer Access-Tabelle. Hierbei werden die einzelnen Optionen als normale Daten betrachtet und entsprechend in der Tabelle gespeichert.
Ein großer Nachteil dieser Lösung ist, dass die Optionen damit fest an Access gebunden sind.
Das Auslesen der Optionen durch andere Programme ist nur durch einen Datenbankzugriff möglich, was unter Umständen problematisch sein kann. Ein weiterer Nachteil besteht darin, dass bei Updates zusammen mit der Datenbank immer auch die Benutzereinstellungen mit ausgetauscht werden. Der Benutzer ist in diesem Fall gezwungen, alle Optionen erneut an seine Anforderungen anzupassen.
Eine Lösung würde in diesem Fall die Auslagerung der Optionen-Tabelle in eine getrennte MDB-Datei bieten, was jedoch insbesondere bei Einzelplatzanwendungen unnötige Probleme mit sich bringt. Schließlich muss die passende Optionen-Tabelle gefunden und ggf. noch in die Hauptanwendung eingebunden werden.
Vorteile bietet die Optionen-Verwaltung per Tabelle beim Einsatz von Anwendungen im Netzwerk. Hier können alle Einstellungen zentral abgelegt werden. Sollte sich ein Benutzer an einem anderen Arbeitsplatz anmelden, erhält er automatisch seine personalisierten Optionen.
Einsatz der Registry
Eine weitere Möglichkeit zum Speichern von Optionen bietet die Windows-Registry. Hierbei handelt es sich um eine hierarchische Datenstruktur, die von Microsoft speziell zur Ablage von Einstellungen und Optionen vorgesehen wurde. Falls Sie unter Windows NT, Windows 2000 oder Windows XP arbeiten, verwaltet Windows Ihre Optionen auch benutzerabhängig. So kann auch hier jeder Benutzer seine eigenen Einstellungen vornehmen.
Zudem schützt das Betriebsystem die Benutzereinstellungen vor den Blicken anderer Benutzer. Dies ist beispielsweise dann von Vorteil, wenn Sie bestimmte Passwörter als Option speichern möchten.
Der Nachteil beim Einsatz der Registry ist, dass der Zugriff nur über API-Funktionsaufrufe erfolgen kann und die Begutachtung nur mit Hilfe des Programms RegEdit.exe möglich ist.
HinweisZum Start von RegEdit wählen Sie den Menüpunkt Start/Ausführen aus, geben den Befehl RegEdit ein und bestätigen mit OK. (
Außerdem ist es umständlich, Optionen von einem PC auf den anderen zu übertragen. Hier müssen Sie mit Hilfe von RegEdit die betreffenden Optionen exportieren und auf dem Zielrechner wieder einlesen.
Einsatz von INI-Dateien
Die dritte hier vorgestellte Möglichkeit besteht im Einsatz von INI-Dateien. Hierbei handelt es sich um die älteste der drei Techniken. Sie stammt noch aus Windows 3.x-Zeiten.
Eine INI-Datei ist eine einfache Text-Datei, in der Optionen in der Form
<Optionsname>=<Optionswert>
abgelegt sind. Verschiedene Optionen können hierbei in Sektionen gruppiert werden, indem den einzelnen Zeilen eine Überschrift in der Form
[<Sektionsname>]
vorangestellt wird.
INI-Dateien haben den großen Vorteil, dass sie im Applikationsverzeichnis angelegt sind und damit einen direkten Bezug zur Anwendung haben. Wenn Sie beispielsweise Ihr Anwendungsverzeichnis in Form eines Backups sichern, haben Sie auch gleich Ihre Optionen mit gesichert.
Darüber hinaus lassen sich INI-Dateien auch sehr leicht von einem PC zum nächsten transportieren und mit einem Text-Editor öffnen und bearbeiten.
Der große Nachteil von INI-Datei besteht in der auf zwei Ebenen beschränkten Struktur. Eine Lösung bietet hier der Einsatz von XML-Dateien. Tatsächlich ist es so, dass Microsoft bei seiner .NET-Technologie auf XML-Dateien zur Speicherung von Konfigurationen setzt und die INI-Datei damit einen zweiten Frühling erlebt.
Tools zum Praxiseinsatz
In den folgenden Abschnitten werden Tools vorgestellt, mit deren Hilfe Sie auf einfache und vereinheitlichte Weise Optionen in den drei vorgestellten Varianten speichern können. Auf den Einsatz von XML wurde hierbei verzichtet, da Access von Haus aus XML gar nicht oder nur sehr rudimentär unterstützt (je nach eingesetzter Access-Version).
Die vorgestellten Klassenmodule finden Sie in den Datenbanken Optionen97.mdb bzw. Optionen2000.mdb auf der aktuellen Heft-CD im Ordner mdb bzw. Musterlösungen.
Das Klassenmodul clsOptionen_Tabelle
Das Klassenmodul clsOptionen_Tabelle enthält die notwendigen Funktionen zur Speicherung von Optionen in einer Access-Tabelle. Voraussetzung hierfür ist, dass die Access-Datenbank die beiden Tabellen tblOptionen und tblOptionswerte enthält. Die beiden Tabellen haben die folgende Struktur:
Feld |
Beschreibung |
OptionID |
Primärschlüsselfeld |
Optionsname |
Name der Option |
Tab. 1: Felder und Beschreibung der Tabelle tblOptionen
Feld |
Beschreibung |
OptionswertID |
Primärschlüsselfeld |
Optionswert |
Der Wert der Option |
OptionID |
Fremdschlüssel zur Tabelle tblOptionen |
BenutzerID |
Fremdschlüssel zur Tabelle tblBenutzer |
Tab. 2: Felder und Beschreibung der Tabelle tblOptionswerte
Beide Tabellen sind über die Felder OptionID miteinander verknüpft. Durch diese Struktur lassen sich in Verbindung mit der BenutzerID für jeden Benutzer individuelle Optionen speichern.

Abb. 1: Das Datenmodell zur Verwaltung von Optionen
Beispielsweise kann die Option 1 namens StartfensterAnzeigen beim Benutzer 1 den Wert True und beim Benutzer 2 den Wert False haben. In der Tabelle tblOptionswerte würden sich in diesem Fall zwei Datensätze befinden.
Public Sub OptionSpeichern(Optionsname As String, Optionswert As String, _ Optional BenutzerID As Integer)
Dim OptionID As Integer
If BenutzerID = 0 Then BenutzerID = 1 'Globaler Benutzer
OptionID = OptionErmittelnOderAnlegen(Optionsname)
OptionswertSetzen OptionID, Optionswert, BenutzerID
End Sub
Quellcode 1
Public Function OptionLesen(Optionsname As String, Optional BenutzerID As Integer, _ Optional DefaultWert As String) As String
Dim OptionID As Integer
Dim Ergebnis As Variant
If BenutzerID = 0 Then BenutzerID = 1 'Globaler Benutzer
OptionID = OptionErmittelnOderAnlegen(Optionsname)
Ergebnis = DLookup("Optionswert", "tblOptionswerte", "OptionID=" _ + CStr(OptionID) + " AND BenutzerID=" + CStr(BenutzerID))
If IsNull(Ergebnis) Then
OptionLesen = DefaultWert
Else
OptionLesen = CStr(Ergebnis)
End If
End Function
Quellcode 2
Aufbau des Klassenmoduls
Das Klassenmodul clsOptionen_Tabelle enthält zwei öffentliche Prozeduren, die das Lesen und Schreiben von Optionen erlauben (s. Quellcode 1 und 2).
Die Prozedur OptionSpeichern erwartet als Parameter den Namen der Option sowie den Optionswert. Optional kann noch eine BenutzerID angegeben werden, um festzulegen, für welchen Benutzer diese Option gültig ist.
Wenn Sie die BenutzerID nicht angeben, verwendet die Routine automatisch die 1 als BenutzerID. Diese könnte in Ihrer Anwendung globale Einstellungen repräsentieren, die nicht für einen bestimmten, sondern für alle Benutzer relevant sind.
Das Lesen einer Option erledigt die Prozedur OptionLesen. Diese Prozedur hat die gleichen Parameter wie die Prozedur OptionSpeichern. Anstelle des Optionswertes wird hier jedoch ein Standardwert angegeben.
Dieser wird von der Prozedur immer dann als Ergebnis zurückgeliefert, wenn die Option in der Tabelle tblOptionswerte nicht existiert.
Neben den beiden öffentlichen Prozeduren sind in dem Klassenmodul noch zwei private Prozeduren enthalten (s. Quellcodes 3 und 4). Die Hilfsfunktion OptionErmittelnOderAnlegen sucht in der Tabelle tblOptionen die übergebene Option oder legt diese ggf. an.
Private Function OptionErmittelnOderAnlegen(Optionsname As String) As Integer
Dim Ergebnis As Variant
Ergebnis = DLookup("OptionID", "tblOptionen", "Optionsname='" + Optionsname + "'")
If IsNull(Ergebnis) Then
Dim rstData As New ADODB.Recordset
With rstData
.ActiveConnection = CurrentProject.Connection
.Source = "tblOptionen"
.MaxRecords = 1
.CursorLocation = adUseServer
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open
.AddNew
.Fields("Optionsname").Value = Optionsname
.Update
OptionErmittelnOderAnlegen = .Fields("OptionID").Value
End With
Else
OptionErmittelnOderAnlegen = Ergebnis
End If
End Function
Quellcode 3
Private Sub OptionswertSetzen(OptionID As Integer, Optionswert As String, _ BenutzerID As Integer)
Dim rstData As New ADODB.Recordset
With rstData
.ActiveConnection = CurrentProject.Connection
.Source = "SELECT * FROM tblOptionswerte WHERE OptionID=" + CStr(OptionID) _ + " AND BenutzerID=" + CStr(BenutzerID)
.MaxRecords = 1
.CursorLocation = adUseServer
.CursorType = adOpenDynamic
.LockType = adLockOptimistic
.Open
If .EOF Then
.AddNew
.Fields("OptionID").Value = OptionID
.Fields("BenutzerID").Value = BenutzerID
End If
.Fields("Optionswert").Value = Optionswert
.Update
End With
End Sub
Quellcode 4
Die zweite Hilfsfunktion OptionswertSetzen hat die gleiche Aufgabe, bezieht sich jedoch auf Optionswerte.
|