{"id":55000115,"date":"2003-08-01T00:00:00","date_gmt":"2020-05-06T15:17:28","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=115"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Benutzereinstellungen_verwalten","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/","title":{"rendered":"Benutzereinstellungen verwalten"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Christoph Spielmann, D&uuml;sseldorf<\/b><\/p>\n<p><b>Die Verwaltung von Benutzereinstellungen ist &#8211; insbesondere beim Einsatz von Access &#8211; eine Aufgabe mit vielen L&ouml;sungsm&ouml;glichkeiten. Dieser Artikel zeigt Ihnen, wie Sie solche Benutzereinstellungen (gleich Optionen) in INI-Dateien, der Windows-Registry oder in Access-Tabellen speichern.<\/b><\/p>\n<p>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.<\/p>\n<p>Ein gro&szlig;er Nachteil dieser L&ouml;sung ist, dass die Optionen damit fest an Access gebunden sind. <\/p>\n<p>Das Auslesen der Optionen durch andere Programme ist nur durch einen Datenbankzugriff m&ouml;glich, was unter Umst&auml;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.<\/p>\n<p>Eine L&ouml;sung w&uuml;rde in diesem Fall die Auslagerung der Optionen-Tabelle in eine getrennte MDB-Datei bieten, was jedoch insbesondere bei Einzelplatzanwendungen unn&ouml;tige Probleme mit sich bringt. Schlie&szlig;lich muss die passende Optionen-Tabelle gefunden und ggf. noch in die Hauptanwendung eingebunden werden.<\/p>\n<p>Vorteile bietet die Optionen-Verwaltung per Tabelle beim Einsatz von Anwendungen im Netzwerk. Hier k&ouml;nnen alle Einstellungen zentral abgelegt werden. Sollte sich ein Benutzer an einem anderen Arbeitsplatz anmelden, erh&auml;lt er automatisch seine personalisierten Optionen.<\/p>\n<p>Eine weitere M&ouml;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&auml;ngig. So kann auch hier jeder Benutzer seine eigenen Einstellungen vornehmen. <\/p>\n<p>Zudem sch&uuml;tzt das Betriebsystem die Benutzereinstellungen vor den Blicken anderer Benutzer. Dies ist beispielsweise dann von Vorteil, wenn Sie bestimmte Passw&ouml;rter als Option speichern m&ouml;chten.<\/p>\n<p>Der Nachteil beim Einsatz der Registry ist, dass der Zugriff nur &uuml;ber API-Funktionsaufrufe erfolgen kann und die Begutachtung nur mit Hilfe des Programms RegEdit.exe m&ouml;glich ist. <\/p>\n<h3>Hinweis<\/h3>\n<p>Zum Start von RegEdit w&auml;hlen Sie den Men&uuml;punkt Start\/Ausf&uuml;hren aus,  geben den Befehl RegEdit ein und best&auml;tigen mit OK. <\/p>\n<p>Au&szlig;erdem ist es umst&auml;ndlich, Optionen von einem PC auf den anderen zu &uuml;bertragen. Hier m&uuml;ssen Sie mit Hilfe von RegEdit die betreffenden Optionen exportieren und auf dem Zielrechner wieder einlesen.<\/p>\n<p>Die dritte hier vorgestellte M&ouml;glichkeit besteht im Einsatz von INI-Dateien. Hierbei handelt es sich um die &auml;lteste der drei Techniken. Sie stammt noch aus Windows 3.x-Zeiten.<\/p>\n<p>Eine INI-Datei ist eine einfache Text-Datei, in der Optionen in der Form<\/p>\n<pre>&lt;Optionsname&gt;=&lt;Optionswert&gt;<\/pre>\n<p>abgelegt sind. Verschiedene Optionen k&ouml;nnen hierbei in Sektionen gruppiert werden, indem den einzelnen Zeilen eine &uuml;berschrift in der Form<\/p>\n<pre>[&lt;Sektionsname&gt;]<\/pre>\n<p>vorangestellt wird.<\/p>\n<p>INI-Dateien haben den gro&szlig;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.<\/p>\n<p>Dar&uuml;ber hinaus lassen sich INI-Dateien auch sehr leicht von einem PC zum n&auml;chsten transportieren und mit einem Text-Editor &ouml;ffnen und bearbeiten.<\/p>\n<p>Der gro&szlig;e Nachteil von INI-Datei besteht in der auf zwei Ebenen beschr&auml;nkten Struktur. Eine L&ouml;sung bietet hier der Einsatz von XML-Dateien. Tats&auml;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&uuml;hling erlebt.<\/p>\n<p>In den folgenden Abschnitten werden Tools vorgestellt, mit deren Hilfe Sie auf einfache und vereinheitlichte Weise Optionen in den drei vorgestellten Varianten speichern k&ouml;nnen. Auf den Einsatz von XML wurde hierbei verzichtet, da Access von Haus aus XML gar nicht oder nur sehr rudiment&auml;r unterst&uuml;tzt (je nach eingesetzter Access-Version).<\/p>\n<p>Die vorgestellten Klassenmodule finden Sie in den Datenbanken Optionen97.mdb bzw. Optionen2000.mdb auf der aktuellen Heft-CD im Ordner mdb bzw. Musterl&ouml;sungen.<\/p>\n<h2>Das KlassenmodulclsOptionen_Tabelle<\/h2>\n<p>Das Klassenmodul clsOptionen_Tabelle enth&auml;lt die  notwendigen Funktionen zur Speicherung von Optionen in einer Access-Tabelle. Voraussetzung hierf&uuml;r ist, dass die Access-Datenbank die beiden Tabellen tblOptionen und tblOptionswerte enth&auml;lt. Die beiden Tabellen haben die  folgende Struktur:<\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feld<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>OptionID<\/p>\n<\/td>\n<td>\n<p>Prim&auml;rschl&uuml;sselfeld<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Optionsname<\/p>\n<\/td>\n<td>\n<p>Name der Option<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 1: Felder und Beschreibung der Tabelle tblOptionen<\/b><\/p>\n<table border=1>\n<tr>\n<td>\n<p><b>Feld<\/b><\/p>\n<\/td>\n<td>\n<p><b>Beschreibung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>OptionswertID<\/p>\n<\/td>\n<td>\n<p>Prim&auml;rschl&uuml;sselfeld<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>Optionswert<\/p>\n<\/td>\n<td>\n<p>Der Wert der Option<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>OptionID<\/p>\n<\/td>\n<td>\n<p>Fremdschl&uuml;ssel zur Tabelle tblOptionen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>BenutzerID<\/p>\n<\/td>\n<td>\n<p>Fremdschl&uuml;ssel zur Tabelle tblBenutzer<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p><b>Tab. 2: Felder und Beschreibung der Tabelle tblOptionswerte<\/b><\/p>\n<p>Beide Tabellen sind &uuml;ber die Felder OptionID miteinander verkn&uuml;pft. Durch diese Struktur lassen sich in Verbindung mit der BenutzerID f&uuml;r jeden Benutzer individuelle Optionen speichern. <\/p>\n<p><IMG height=\"230\" src=\"..\/fileadmin\/_temp_\/{E07927CD-DF7F-4F49-A77F-EDD59CD5DF82}\/pic001.png\" width=\"419\" border=\"0\"><\/p>\n<p><!--30percent--><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1:  Das Datenmodell zur Verwaltung von Optionen<\/span><\/b><\/p>\n<p>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&uuml;rden sich in diesem Fall zwei Datens&auml;tze befinden.<\/p>\n<pre>Public Sub OptionSpeichern(Optionsname As String, Optionswert As String, _    Optional BenutzerID As Integer)\r\n    Dim OptionID As Integer\r\n    If BenutzerID = 0 Then BenutzerID = 1 ''Globaler Benutzer\r\n    OptionID = OptionErmittelnOderAnlegen(Optionsname)\r\n    OptionswertSetzen OptionID, Optionswert, BenutzerID\r\nEnd Sub<\/pre>\n<p><b>Quellcode 1<\/b><\/p>\n<pre>Public Function OptionLesen(Optionsname As String, Optional BenutzerID As Integer, _    Optional DefaultWert As String) As String\r\n    Dim OptionID As Integer\r\n    Dim Ergebnis As Variant\r\n    If BenutzerID = 0 Then BenutzerID = 1 ''Globaler Benutzer\r\n    OptionID = OptionErmittelnOderAnlegen(Optionsname)\r\n    Ergebnis = DLookup(\"Optionswert\", \"tblOptionswerte\", \"OptionID=\" _        + CStr(OptionID) + \" AND BenutzerID=\" + CStr(BenutzerID))\r\n    If IsNull(Ergebnis) Then\r\n        OptionLesen = DefaultWert\r\n    Else\r\n        OptionLesen = CStr(Ergebnis)\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 2<\/b><\/p>\n<h3>Aufbau des Klassenmoduls<\/h3>\n<p>Das Klassenmodul clsOptionen_Tabelle enth&auml;lt zwei &ouml;ffentliche Prozeduren, die das Lesen und Schreiben von Optionen erlauben (s. Quellcode 1 und 2).<\/p>\n<p>Die Prozedur OptionSpeichern erwartet als Parameter den Namen der Option sowie den Optionswert. Optional kann noch eine BenutzerID angegeben werden, um festzulegen, f&uuml;r welchen Benutzer diese Option g&uuml;ltig ist.<\/p>\n<p>Wenn Sie die BenutzerID nicht angeben, verwendet die Routine automatisch die 1 als BenutzerID. Diese k&ouml;nnte in Ihrer Anwendung globale Einstellungen repr&auml;sentieren, die nicht f&uuml;r einen bestimmten, sondern f&uuml;r alle Benutzer relevant sind.<\/p>\n<p>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.<\/p>\n<p>Dieser wird von der Prozedur immer dann als Ergebnis zur&uuml;ckgeliefert, wenn die Option in der Tabelle tblOptionswerte nicht existiert.<\/p>\n<p>Neben den beiden &ouml;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 &uuml;bergebene Option oder legt diese ggf. an.<\/p>\n<pre>Private Function OptionErmittelnOderAnlegen(Optionsname As String) As Integer\r\n    Dim Ergebnis As Variant\r\n    Ergebnis = DLookup(\"OptionID\", \"tblOptionen\", \"Optionsname=''\" + Optionsname + \"''\")\r\n    If IsNull(Ergebnis) Then\r\n        Dim rstData As New ADODB.Recordset\r\n        With rstData\r\n            .ActiveConnection = CurrentProject.Connection\r\n            .Source = \"tblOptionen\"\r\n            .MaxRecords = 1\r\n            .CursorLocation = adUseServer\r\n            .CursorType = adOpenDynamic\r\n            .LockType = adLockOptimistic\r\n            .Open\r\n            .AddNew\r\n                .Fields(\"Optionsname\").Value = Optionsname\r\n            .Update\r\n            OptionErmittelnOderAnlegen = .Fields(\"OptionID\").Value\r\n        End With\r\n    Else\r\n        OptionErmittelnOderAnlegen = Ergebnis\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 3<\/b><\/p>\n<pre>\r\nPrivate Sub OptionswertSetzen(OptionID As Integer, Optionswert As String, _    BenutzerID As Integer)\r\n    Dim rstData As New ADODB.Recordset\r\n    With rstData\r\n        .ActiveConnection = CurrentProject.Connection\r\n        .Source = \"SELECT * FROM tblOptionswerte WHERE OptionID=\" + CStr(OptionID) _            + \" AND BenutzerID=\" + CStr(BenutzerID)\r\n        .MaxRecords = 1\r\n        .CursorLocation = adUseServer\r\n        .CursorType = adOpenDynamic\r\n        .LockType = adLockOptimistic\r\n        .Open\r\n        If .EOF Then\r\n            .AddNew\r\n            .Fields(\"OptionID\").Value = OptionID\r\n            .Fields(\"BenutzerID\").Value = BenutzerID\r\n        End If\r\n        .Fields(\"Optionswert\").Value = Optionswert\r\n        .Update\r\n    End With\r\nEnd Sub<\/pre>\n<p><b>Quellcode 4<\/b><\/p>\n<p>Die zweite Hilfsfunktion OptionswertSetzen hat die gleiche Aufgabe, bezieht sich jedoch auf Optionswerte.<\/p>\n<h3>Einsatz des Klassenmoduls<\/h3>\n<pre>Public Sub Demo_Optionen_Tabelle()\r\n    Dim MeineOptionen_Tabelle As New clsOptionen_Tabelle\r\n    With MeineOptionen_Tabelle\r\n        .OptionSpeichern \"StartfensterAnzeigen\", \"True\"\r\n        Debug.Print \"Tabelle\", .OptionLesen(\"StartfensterAnzeigen\")\r\n    End With\r\nEnd Sub<\/pre>\n<p><b>Quellcode 5<\/b><\/p>\n<pre>Public Sub Demo_Optionen_Registry()\r\n    Dim MeineOptionen_Registry As New clsOptionen_Registry\r\n    With MeineOptionen_Registry\r\n        .OptionSpeichern \"StartfensterAnzeigen\", \"True\"\r\n        Debug.Print \"Registry\", .OptionLesen(\"StartfensterAnzeigen\")\r\n    End With\r\nEnd Sub<\/pre>\n<p><b>Quellcode 6<\/b><\/p>\n<pre>Public Function OptionLesen(Optionsname As String, Optional DefaultWert As String) _    As String\r\n    TopKey = HKEY_CURRENT_USER\r\n    Key = \"Software\\\" + CurrentProject.Name\r\n    OptionLesen = ReadString(Optionsname, DefaultWert)\r\nEnd Function<\/pre>\n<p><b>Quellcode 7<\/b><\/p>\n<p>Einen Test des Klassenmoduls k&ouml;nnen Sie mit der Prozedur aus Quellcode 5 vornehmen.<\/p>\n<p>Das Beispiel instanziert zun&auml;chst ein neues Objekt auf Basis der Klasse clsOptionen_Tabelle. Danach wird ein Optionswert geschrieben und direkt wieder ausgelesen. Das Ergebnis wird im Direktfenster angezeigt.<\/p>\n<h2>Das Klassenmodul clsOptionen_Registry<\/h2>\n<p>Das Klassenmodul clsOptionen_Registry stellt die gleichen &ouml;ffentlichen Methoden wie das zuvor vorgestellte Klassenmodul zur Verf&uuml;gung. Allerdings fehlt hier jeweils die BenutzerID, da die Daten von Haus aus immer individuell zum aktuell am Betriebssystem angemeldeten Benutzer gespeichert werden. Den Einsatz des Klassenmoduls demonstriert das Beispiel aus Quellcode 6.<\/p>\n<h3>Einsatz des Klassenmoduls<\/h3>\n<p>Um die Handhabung so einfach wie m&ouml;glich zu gestalten, werden die Optionen in der Registry unter dem Namen der aktuellen MDB-Datei abgelegt. F&uuml;r Experten: Der Pfad lautet HKEY_CURRENT_USER\\Software\\&lt;MDBDateiname&gt;. <\/p>\n<p>Die Methode OptionSpeichern ber&uuml;cksichtigt dies wie in Quellcode 7.<\/p>\n<p>&uuml;ber die Variablen TopKey und Key wird der Pfad der zu speichernden Option festgelegt. Die Methode ReadString liest den Wert schlie&szlig;lich aus der Registry aus (s. Quellcode 8).<\/p>\n<pre>Private Function ReadString(SubKey As String, ByRef RegString As String) As Boolean\r\n    Dim lHandle As Long\r\n    Dim strValue As String\r\n    Dim lValueLength As Long\r\n    Dim fKeyOpen As Boolean\r\n    ReadString = True\r\n    If ERROR_SUCCESS = RegOpenKeyEx(TopKey, Key, ByVal 0&, KEY_QUERY_VALUE, _        lHandle) Then\r\n        fKeyOpen = True\r\n        strValue = String(255, 0)\r\n        lValueLength = Len(strValue)\r\n        If ERROR_SUCCESS = RegQueryValueEx(lHandle, SubKey, ByVal 0&, REG_SZ, _            ByVal strValue, lValueLength) Then\r\n            strValue = Left(strValue, lValueLength)\r\n            RegCloseKey lHandle\r\n            fKeyOpen = False\r\n            RegString = RightTrimNulls(strValue)\r\n        End If\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 8<\/b><\/p>\n<pre>Public Sub OptionSpeichern(Optionsname As String, Optionswert As String)\r\n    TopKey = HKEY_CURRENT_USER\r\n    Key = \"Software\\\" + CurrentProject.Name\r\n    WriteString Optionsname, Optionswert\r\nEnd Sub<\/pre>\n<p><b>Quellcode 9<\/b><\/p>\n<p><IMG height=\"320\" src=\"..\/fileadmin\/_temp_\/{E07927CD-DF7F-4F49-A77F-EDD59CD5DF82}\/pic002.png\" width=\"500\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2:  Die Option im Registry-Editor<\/span><\/b><\/p>\n<p>Zuerst wird der betreffende Knotenpunkt der Registry ge&ouml;ffnet und dann der Wert ausgelesen. Schlie&szlig;lich erfolgt noch eine Konvertierung des bei API-Funktionen &uuml;blichen String-Formats in ein f&uuml;r VB vertr&auml;gliches Format. Die Deklaration der in dieser Prozedur eingesetzten API-Funktionen sowie den Aufbau der Funktion TrimNulls finden Sie im Klassenmodul der Beispieldatenbank.<\/p>\n<pre>Private Function WriteString(SubKey As String, RegString As String) As Boolean\r\n    Dim lHandle As Long\r\n    Dim fKeyOpen As Boolean\r\n    WriteString = True\r\n    If ERROR_SUCCESS = RegCreateKey(TopKey, Key, lHandle) Then\r\n        fKeyOpen = True\r\n        If ERROR_SUCCESS = RegSetValue(lHandle, SubKey, ByVal 0&, REG_SZ, _            ByVal RegString, Len(RegString)) Then\r\n            RegCloseKey lHandle\r\n            fKeyOpen = False\r\n        End If\r\n    End If\r\nEnd Function<\/pre>\n<p><b>Quellcode 10<\/b><\/p>\n<pre>Private Declare Function WritePrivateProfileString Lib \"kernel32\" _    Alias \"WritePrivateProfileStringA\" (ByVal lpApplicationName As String, ByVal _    lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long\r\nPrivate Declare Function GetPrivateProfileString Lib \"kernel32\" Alias _    \"GetPrivateProfileStringA\" (ByVal lpApplicationName As String, ByVal lpKeyName _    As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, _    ByVal nSize As Long, ByVal lpFileName As String) As Long\r\nPublic Sub OptionSpeichern(Optionsname As String, Optionswert As String)\r\n    WritePrivateProfileString \"Optionen\", Optionsname, Optionswert, GetINIDateiname()\r\nEnd Sub\r\nPublic Function OptionLesen(Optionsname As String, Optional DefaultWert As String) _    As String\r\n    Dim Ergebnis As String\r\n    Dim Anzahl As Integer\r\n    Ergebnis = Space(255)\r\n    Anzahl = GetPrivateProfileString(\"Optionen\", Optionsname, DefaultWert, _        Ergebnis, 255, GetINIDateiname())\r\n    OptionLesen = Left(Ergebnis, Anzahl)\r\nEnd Function\r\nPrivate Function GetINIDateiname() As String\r\n    GetINIDateiname = CurrentProject.Path + \"\\Optionen.ini\"\r\nEnd Function<\/pre>\n<p><b>Quellcode 11<\/b><\/p>\n<p>Der Schreibvorgang l&auml;uft &auml;hnlich ab (s. Quellcode 9). Die Funktion WriteString ist wie in Quellcode 10 aufgebaut.<\/p>\n<p>Die Besonderheit ist hierbei, dass vor dem Schreiben der Option der entsprechende Pfad bei Bedarf angelegt wird.<\/p>\n<h2>Das Klassenmodul clsOptionen_INI<\/h2>\n<p><IMG height=\"298\" src=\"..\/fileadmin\/_temp_\/{E07927CD-DF7F-4F49-A77F-EDD59CD5DF82}\/pic003.png\" width=\"471\" border=\"0\"><\/p>\n<p><b><\/b><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3:  Die INI-Datei im Texteditor<\/span><\/b><\/p>\n<p>Auch im Klassenmodul clsOptionen_INI kommen API-Funktionen zum Einsatz.<\/p>\n<p>Diese lassen sich jedoch wesentlich einfacher als beim Registry-Zugriff handhaben, weswegen der Quellcode des kompletten Klassenmoduls wesentlich kompakter ist (s. Quellcode 11).<\/p>\n<p>Im Kopf des Moduls erfolgt die Deklaration der API-Funktionen WritePrivateProfileString und GetPrivateProfileString.<\/p>\n<p>Diese werden beim Lese- und Schreibzugriff durch die Funktionen OptionLesen und OptionSpeichern direkt aufgerufen.<\/p>\n<p>Beim Lesen muss hierbei lediglich noch die Konvertierung des API-String-Formats in das VBA-Format erfolgen.<\/p>\n<pre>Public Sub Demo_Optionen_INI()\r\n    Dim MeineOptionen_INI As New clsOptionen_INI\r\n    With MeineOptionen_INI\r\n        .OptionSpeichern \"StartfensterAnzeigen\", \"True\"\r\n        Debug.Print \"INI\", .OptionLesen(\"StartfensterAnzeigen\")\r\n    End With\r\nEnd Sub<\/pre>\n<p><b>Quellcode 12<\/b><\/p>\n<p>Der Pfad und Dateiname der INI-Datei wird durch die Funktion GetINIDateiname festgelegt.<\/p>\n<p>Sie ermittelt den aktuellen Pfad der MDB-Datei und h&auml;ngt hier den Dateinamen Optionen.ini an.<\/p>\n<h3>Einsatz des Klassenmoduls<\/h3>\n<p>Das  Beispiel aus Quellcode 12 demonstriert den Einsatz des Klassenmoduls.<\/p>\n<p>Nachdem Sie nun alle drei Varianten zum Speichern von Optionen kennen gelernt haben, k&ouml;nnen Sie die f&uuml;r Ihre Zwecke passende M&ouml;glichkeit ausw&auml;hlen.<\/p>\n<p>Hierbei sollte Sie nicht st&ouml;ren, dass die INI-Methode bereits veraltet ist, da das Ablegen von Optionen in Text- bzw. XML-Dateien dank .NET wieder modern ist.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Verwaltung von Benutzereinstellungen ist &#8211; insbesondere beim Einsatz von Access &#8211; eine Aufgabe mit vielen L&ouml;sungsm&ouml;glichkeiten. Dieser Artikel zeigt Ihnen, wie Sie solche Benutzereinstellungen (gleich Optionen) in INI-Dateien, der Windows-Registry oder in Access-Tabellen speichern.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662003,66042003,44000028],"tags":[],"class_list":["post-55000115","post","type-post","status-publish","format-standard","hentry","category-662003","category-66042003","category-Ergonomie_und_Benutzeroberflaeche"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Benutzereinstellungen verwalten - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benutzereinstellungen verwalten\" \/>\n<meta property=\"og:description\" content=\"Die Verwaltung von Benutzereinstellungen ist - insbesondere beim Einsatz von Access - eine Aufgabe mit vielen L&ouml;sungsm&ouml;glichkeiten. Dieser Artikel zeigt Ihnen, wie Sie solche Benutzereinstellungen (gleich Optionen) in INI-Dateien, der Windows-Registry oder in Access-Tabellen speichern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-06T15:17:28+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Benutzereinstellungen verwalten\",\"datePublished\":\"2020-05-06T15:17:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/\"},\"wordCount\":1516,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/96b457b2a3a64f268823f8ba85112d4c\",\"articleSection\":[\"2003\",\"4\\\/2003\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/\",\"name\":\"Benutzereinstellungen verwalten - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/96b457b2a3a64f268823f8ba85112d4c\",\"datePublished\":\"2020-05-06T15:17:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/96b457b2a3a64f268823f8ba85112d4c\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/96b457b2a3a64f268823f8ba85112d4c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Benutzereinstellungen_verwalten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benutzereinstellungen verwalten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Benutzereinstellungen verwalten - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/","og_locale":"de_DE","og_type":"article","og_title":"Benutzereinstellungen verwalten","og_description":"Die Verwaltung von Benutzereinstellungen ist - insbesondere beim Einsatz von Access - eine Aufgabe mit vielen L&ouml;sungsm&ouml;glichkeiten. Dieser Artikel zeigt Ihnen, wie Sie solche Benutzereinstellungen (gleich Optionen) in INI-Dateien, der Windows-Registry oder in Access-Tabellen speichern.","og_url":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-06T15:17:28+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Benutzereinstellungen verwalten","datePublished":"2020-05-06T15:17:28+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/"},"wordCount":1516,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c","articleSection":["2003","4\/2003","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/","url":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/","name":"Benutzereinstellungen verwalten - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c","datePublished":"2020-05-06T15:17:28+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/96b457b2a3a64f268823f8ba85112d4c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Benutzereinstellungen_verwalten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Benutzereinstellungen verwalten"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000115"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000115\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}