{"id":55000931,"date":"2014-04-01T00:00:00","date_gmt":"2020-05-22T21:20:09","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=931"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Verknuepfungen_fuer_Datenbankdateien_erstellen","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/","title":{"rendered":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Nervt es Sie nicht auch, wenn Sie alle Jubeljahre mal eine Verkn&uuml;pfung zum Starten einer Datenbankdatei erstellen &#8211; und dann m&uuml;hsam den Pfad zur MSAccess.exe und zur betroffenen Access-Datenbank zusammentippen m&uuml;ssen Mir geht es jedenfalls so. Deshalb habe ich ein schickes, kleines Add-In gebaut, mit dem Sie diese Aufgabe mit wenigen Mausklicks erledigen k&ouml;nnen. Wie es funktioniert und welche Techniken dahinterstecken, erfahren Sie im vorliegenden Beitrag.<\/b><\/p>\n<p>Verkn&uuml;pfungen zu Datenbankdateien haben durchaus ihren Sinn. Sie legen damit nicht nur fest, welche Version der <b>MSAccess.exe <\/b>verwendet werden soll (wenn &uuml;berhaupt mehrere Versionen installiert sind), welche Datenbank zu &ouml;ffnen ist und mit welchen Parametern dies geschehen soll.<\/p>\n<p>Verkn&uuml;pfungen haben in der Regel die Dateiendung <b>.lnk<\/b> und ber&uuml;cksichtigen im Icon die Anwendung, die ge&ouml;ffnet werden soll. Au&szlig;erdem findet sich dort in der Regel ein Pfeil-Symbol. Der grunds&auml;tzliche Aufbau des Inhalts einer Verkn&uuml;pfung sieht so aus:<\/p>\n<pre>\"&lt;Pfad zur MSAccess.Exe&gt;\" \"&lt;Pfad zur Access-Datenbank&gt;\" &lt;Parameter&gt;<\/pre>\n<p>Die ersten beiden Elemente fasst man sicherheitshalber in Anf&uuml;hrungszeichen ein. Dies ist eigentlich nur n&ouml;tig, wenn der Pfad Leerzeichen enth&auml;lt, aber anderenfalls schadet es auch nicht.<\/p>\n<p>Bild 1 zeigt ein Beispiel f&uuml;r die Eigenschaften einer Verkn&uuml;pfung, welche die Datenbank f&uuml;r den exklusiven Zugriff &ouml;ffnet.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_003.png\" alt=\"Verkn&uuml;pfungen zu Access-Datenbanken\" width=\"570\" height=\"521,167\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Verkn&uuml;pfungen zu Access-Datenbanken<\/span><\/b><\/p>\n<p>Parameter gibt es durchaus eine ganze Menge, n&auml;mlich die folgenden:<\/p>\n<ul>\n<li><b>\/excl<\/b>: &ouml;ffnet die Datenbank f&uuml;r den exklusiven Zugriff.<\/li>\n<li><b>\/ro<\/b>: &ouml;ffnet die Datenbank f&uuml;r den schreibgesch&uuml;tzten Zugriff.<\/li>\n<li><b>\/profile <Benutzerprofil><\/b>: Startet Access mit einem anderen Benutzerprofil.<\/li>\n<li><b>\/compact <Zieldatenbank><\/b>: Komprimiert und repariert die mit <b><Pfad zur Access-Datenbank> <\/b>angegebene Datenbank (siehe oben). Wenn Sie einen Wert f&uuml;r <b><Zieldatenbank> <\/b>angeben, wird die komprimierte Datenbank unter dem entsprechenden Pfad\/Namen erstellt.<\/li>\n<li><b>\/convert <Zieldatenbank><\/b>: Konvertiert die mit <b><Pfad zur Access-Datenbank><\/b> angegebene Datei in die aktuelle Access-Version, also die Version der mit <b><Pfad zur MSAccess.Exe><\/b> referenzierten Access-Anwendung.<\/li>\n<li><b>\/x <Makroname><\/b>: Hier k&ouml;nnen Sie den Namen eines Makros angeben, das beim Start von Access aufgerufen werden soll.<\/li>\n<li><b>\/cmd<\/b>: Hier k&ouml;nnen Sie eine Zeichenfolge angeben, die Sie nach dem Start der Datenbank mit der VBA-Funktion <b>Command <\/b>auslesen k&ouml;nnen.<\/li>\n<\/ul>\n<p>Au&szlig;erdem gibt es noch einige Parameter, die nur in &auml;lteren Access-Versionen zum Einsatz kamen. Die ersten drei stehen in Zusammenhang mit der Verwendung einer Arbeitsgruppen-Informationsdatei, Benutzergruppen und Benutzern:<\/p>\n<ul>\n<li><b>\/user <Benutzername><\/b>: &uuml;bergibt den Benutzernamen, unter dem die Anwendung verwendet werden soll.<\/li>\n<li><b>\/pwd <Kennwort><\/b>: &uuml;bergibt das Kennwort f&uuml;r den Benutzer.<\/li>\n<li><b>\/wrkgrp<\/b>: Gibt die Arbeitsgruppen-Informationsdatei an, die verwendet werden soll.<\/li>\n<\/ul>\n<p>Zwei weitere Parameter sind ebenfalls veraltet, k&ouml;nnen aber aus Kompatibilit&auml;tsgr&uuml;nden noch verwendet werden:<\/p>\n<ul>\n<li><b>\/runtime<\/b>: Sorgt daf&uuml;r, dass die Datenbank im Runtime-Modus ge&ouml;ffnet wird, also so, als ob nicht die Vollversion, sondern nur die Runtime-Version von Access installiert w&auml;re.<\/li>\n<li><b>\/repair<\/b>: Fr&uuml;here Access-Versionen (vor Access 2000) boten separate Funktionen zum Komprimieren und Reparieren an. Dies wird nun mit <b>\/compact <\/b>erledigt.<\/li>\n<li><b>\/nostartup<\/b>: &ouml;ffnet Access ohne Startdialog. Diese Option scheint in den neueren Access-Versionen gar nicht mehr zu funktionieren.<\/li>\n<\/ul>\n<p>Die Zusammenstellung der Pfade zur <b>MSAccess.exe <\/b>sowie zu der zu &ouml;ffnenden Datenbankdatei und der Parameter wollen wir nun mithilfe eines kleinen Add-Ins erleichtern.<\/p>\n<p><b>Add-In installieren<\/b><\/p>\n<p>Das fertige Add-In finden Sie im Download unter dem Dateinamen <b>AccessLinker.mda<\/b>. Um das Add-In in Access verf&uuml;gbar zu machen, starten Sie den Add-In-Manager von Access. Dazu nutzen Sie etwa unter Access 2010 den Ribbon-Eintrag <b>Datenbanktools|Add-Ins|Add-In-Manager<\/b>.<\/p>\n<p>Klicken Sie im nun erscheinenden Dialog <b>Add-In-Manager <\/b>auf die Schaltfl&auml;che <b>Neues hinzuf&uuml;gen&#8230; <\/b>und w&auml;hlen Sie die Datei <b>AccessLinker.mda <\/b>aus. Das war es schon &#8211; Sie finden nun einen neuen Eintrag namens <b>AccessLinker <\/b>in der Liste der Add-Ins.<\/p>\n<p>Wenn Sie das Add-In aufrufen, ohne dass eine Datenbank ge&ouml;ffnet ist, erhalten Sie einen Hinweis, dass dieses Add-In nur in Verbindung mit einer ge&ouml;ffneten Datenbank funktioniert.<\/p>\n<p>Anderenfalls erscheint nun das einzige Formular dieses Add-Ins (s. Bild 2). <\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_004.png\" alt=\"Das Add-In zum Erstellen von Access-Verkn&uuml;pfungen\" width=\"570\" height=\"562,3745\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Das Add-In zum Erstellen von Access-Verkn&uuml;pfungen<\/span><\/b><\/p>\n<p>Hier finden Sie folgende Elemente:<\/p>\n<ul>\n<li>Kombinationsfeld zur Auswahl bereits gespeicherter Konfigurationen<\/li>\n<li>Schaltfl&auml;che <b>Neu<\/b>: Legt eine neue Konfiguration an.<\/li>\n<li>Schaltfl&auml;che <b>L&ouml;schen<\/b>: L&ouml;scht die aktuell angezeigte Konfiguration.<\/li>\n<li>Textfeld zum Eingeben einer Bezeichnung f&uuml;r Konfiguration<\/li>\n<li>Textfeld <b>Verkn&uuml;pfung speichern unter <\/b>zum Eingeben des Dateinamens f&uuml;r die zu erstellende Verkn&uuml;pfung inklusive einer Schaltfl&auml;che, die einen <b>Datei speichern<\/b>-Dialog anzeigt<\/li>\n<li>Textfeld <b>Pfad zur MSAccess.exe <\/b>zur Eingabe des Pfades zur ausf&uuml;hrbaren Datei <b>MSAccess.exe <\/b>inklusive Schaltfl&auml;che zum Anzeigen eines <b>Datei &ouml;ffnen<\/b>-Dialogs<\/li>\n<li>Textfeld <b>Pfad zur Datenbank <\/b>zur Eingabe des Dateinamens der Datenbank, die durch die Verkn&uuml;pfung ge&ouml;ffnet werden soll. Sie k&ouml;nnen dieses Feld leer lassen, wenn die Verkn&uuml;pfung einfach nur Access &ouml;ffnen soll.<\/li>\n<li>Weitere Steuerelemente, welche die Eingabe aller verf&uuml;gbaren Kommandozeilenparameter erlauben<\/li>\n<li>Schaltfl&auml;che <b>Verkn&uuml;pfung erstellen<\/b>, welche die <b>.lnk<\/b>-Datei nach den Vorgaben des Dialogs erstellt.<\/li>\n<\/ul>\n<p><b>Add-In erstellen<\/b><\/p>\n<p>Die Add-In-Datenbank erstellen wir gleich im Add-In-Verzeichnis von Access. Dieses finden Sie heraus, indem Sie zwei kurze Befehle im Direktbereich des VBA-Editors absetzen (s. Bild 3).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_001.png\" alt=\"Ermitteln des Add-In-Verzeichnisses von Access\" width=\"570\" height=\"142,0388\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Ermitteln des Add-In-Verzeichnisses von Access<\/span><\/b><\/p>\n<p>Legen Sie in diesem Verzeichnis eine neue Datenbank namens <b>AccessLinker.mda <\/b>an. Damit wir die Datenbank als Add-In installieren k&ouml;nnen, f&uuml;gen Sie au&szlig;erdem eine Tabelle namens <b>USysReg-Info <\/b>hinzu, die wie in Bild 4 aussieht. Die Tabelle enth&auml;lt vier Datens&auml;tze. Der erste legt das Element <b>Menu Add-Ins\\AccessLinker <\/b>in der Registry in dem f&uuml;r Access-Add-Ins vorgesehenen Zweig an.  Die &uuml;brigen f&uuml;gen einige Elemente hinzu. Der Eintrag mit dem Wert <b>Expression <\/b>im Feld <b>ValName <\/b>legt die VBA-Funktion fest, die beim Starten des Add-Ins ausgef&uuml;hrt werden soll. <b>Description <\/b>enth&auml;lt die Beschreibung des Add-Ins. <b>Library <\/b>gibt die <b>.mda<\/b>-Datei an, welche die beim Aufruf des Add-Ins zu startende Funktion enth&auml;lt.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_005.png\" alt=\"Inhalt der Tabelle USysRegInfo des neu erstellten Add-Ins\" width=\"650\" height=\"353,1637\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Inhalt der Tabelle USysRegInfo des neu erstellten Add-Ins<\/span><\/b><\/p>\n<p>Zus&auml;tzlich passen Sie noch die Eigenschaften der Add-In-Datenbank an. Diese &ouml;ffnen Sie etwa unter Access 2010, indem Sie mit einem Klick auf <b>Datei <\/b>den Backstage-Bereich &ouml;ffnen und dort rechts auf <b>Datenbankeigenschaften anzeigen und bearbeiten <\/b>klicken.<\/p>\n<p>Es erscheint der Dialog <b>AccessLinker.mda Eigenschaften<\/b>, in dem Sie wie in Bild 5 zum Registerreiter <b>Zusammenfassung <\/b>wechseln. Hier tragen Sie die entsprechenden Informationen f&uuml;r die Eigenschaften <b>Titel<\/b>, <b>Firma <\/b>und <b>Kommentare <\/b>ein.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_007.png\" alt=\"Eigenschaften der Add-In-Datenbank\" width=\"375\" height=\"422,5746\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Eigenschaften der Add-In-Datenbank<\/span><\/b><\/p>\n<p>Bild 6 zeigt, wo die dort eingegebenen Eigenschaften wieder auftauchen &#8211; n&auml;mlich im Add-In-Manager, wenn Sie dort den Eintrag <b>AccessLinker <\/b>anklicken.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_006.png\" alt=\"Hier erscheinen die Datenbank-Eigenschaften.\" width=\"375\" height=\"230,5622\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Hier erscheinen die Datenbank-Eigenschaften.<\/span><\/b><\/p>\n<p><b>Beim Start des Add-Ins<\/b><\/p>\n<p>Wenn der Benutzer das Add-In &uuml;ber den Add-In-Manager registriert und &uuml;ber das Add-In-Men&uuml; startet, l&ouml;st dies die in die Registry eingetragene Funktion <b>Autostart <\/b>aus. Diese f&uuml;gen wir nun zu einem noch zu erstellenden Standardmodul namens <b>mdlAddIn <\/b>hinzu (s. Listing 1). Die Funktion soll zwei Aufgaben erf&uuml;llen. Die erste ist die Pr&uuml;fung, ob zum Zeitpunkt des &ouml;ffnens des Men&uuml;s bereits eine Access-Datenbank ge&ouml;ffnet ist. Dazu pr&uuml;ft das Add-In die Anzahl der in der aktuellen Sitzung ge&ouml;ffneten Datenbanken mit der <b>Count<\/b>-Eigenschaft der <b>Databases<\/b>-Auflistung. Enth&auml;lt diese den Wert <b>0<\/b>, erh&auml;lt der Benutzer eine Meldung, die ihn darauf hinweist, dass das Add-In nur bei ge&ouml;ffneter Datenbankdatei funktioniert. Anschlie&szlig;end wird das Add-In beendet.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>Autostart()\r\n     <span style=\"color:blue;\">If <\/span>DBEngine.Workspaces(0).Databases.Count = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Dieses Add-In funktioniert nur bei ge&ouml;ffneter Datenbankanwendung.\", _\r\n             vbOKOnly + vbExclamation, \"Keine Datenbank ge&ouml;ffnet.\"\r\n         <span style=\"color:blue;\">Exit Function<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     DoCmd.OpenForm \"frmVerknuepfungErstellen\", WindowMode:=acDialog\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Diese Funktion wird beim Start des Add-Ins ausgel&ouml;st <\/span><\/b><\/p>\n<p>Ist hingegen eine Datenbank ge&ouml;ffnet und somit die Eigenschaft <b>Count <\/b>gr&ouml;&szlig;er als <b>0<\/b>, &ouml;ffnet die Funktion das Formular <b>frmVerknuepfungErstellen<\/b> als modalen Dialog.<\/p>\n<p><b>Speichern der Konfigurationen<\/b><\/p>\n<p>Bevor wir uns das Formular <b>frmVerknuepfungErstellen <\/b>im Detail ansehen, erstellen Sie noch die Tabelle <b>tblKonfigurationen <\/b>zum Speichern der verschiedenen Konfigurationen zum Anlegen der Verkn&uuml;pfungen.<\/p>\n<p>Diese sieht im Entwurf wie in Bild 7 aus und enth&auml;lt die folgenden Felder (Informationen zu den einzelnen Optionen, deren Felder mit <b>Option&#8230; <\/b>beginnen, finden Sie weiter oben):<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_002.png\" alt=\"Entwurf der Tabelle tblKonfigurationen\" width=\"575\" height=\"374,3997\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Entwurf der Tabelle tblKonfigurationen<\/span><\/b><\/p>\n<ul>\n<li><b>KonfigurationID<\/b>: Prim&auml;rschl&uuml;sselfeld<\/li>\n<li><b>Bezeichnung<\/b>: Bezeichnung der Verkn&uuml;pfung (eindeutiges Pflichtfeld)<\/li>\n<li><b>VerknuepfungSpeichernUnter<\/b>: Speicherort der Verkn&uuml;pfung (Pflichtfeld)<\/li>\n<li><b>PfadAccess<\/b>: Pfad zur <b>MSAccess.exe<\/b> (Pflichtfeld)<\/li>\n<li><b>PfadDatenbank<\/b>: Pfad zur Datenbankdatei (kein Pflichtfeld)<\/li>\n<li><b>OptionExcl<\/b>: Exklusiv &ouml;ffnen<\/li>\n<li><b>OptionRo<\/b>: Schreibgesch&uuml;tzt &ouml;ffnen<\/li>\n<li><b>OptionProfile<\/b>: Mit welchem Profil &ouml;ffnen<\/li>\n<li><b>OptionCompact<\/b>: Komprimieren<\/li>\n<li><b>OptionCompactZiel<\/b>: In welche Datei komprimieren<\/li>\n<li><b>OptionConvert<\/b>: Konvertieren<\/li>\n<li><b>OptionConvertZiel<\/b>: In welche Datei konvertieren<\/li>\n<li><b>OptionX<\/b>: Welches Makro starten<\/li>\n<li><b>OptionCmd<\/b>: Kommandotext<\/li>\n<li><b>OptionNoStartup<\/b>: Kein Startdialog<\/li>\n<li><b>OptionUser<\/b>: Welcher Benutzer<\/li>\n<li><b>OptionPwd<\/b>: Welches Kennwort<\/li>\n<li><b>OptionWrkgrp<\/b>: Welche Arbeitsgruppen-Informationsdatei<\/li>\n<li><b>OptionRuntime<\/b>: Runtime-Modus<\/li>\n<li><b>OptionRepair<\/b>: Datenbank reparieren<\/li>\n<\/ul>\n<p><b>Das Add-In-Formular<\/b><\/p>\n<p>Mit dieser Tabelle im Gep&auml;ck k&ouml;nnen wir uns an die Gestaltung des Formulars <b>frmVerknuepfungErstellen<\/b> begeben. Dieses sieht im Entwurf wie in Bild 8 aus. Das Formular binden Sie &uuml;ber die Eigenschaft <b>Datenherkunft <\/b>an die Tabelle <b>tblKonfigurationen<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_008.png\" alt=\"Entwurf des Formulars frmVerknuepfungErstellen\" width=\"625\" height=\"663,3035\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Entwurf des Formulars frmVerknuepfungErstellen<\/span><\/b><\/p>\n<p>Auf diese Weise k&ouml;nnen Sie direkt alle Felder der Tabelle <b>tblKonfigurationen <\/b>aus der Feldliste in den Detailbereich des Formulars ziehen. Die Felder richten Sie dann wie in der Abbildung aus. Benennen Sie die gebundenen Felder um, indem Sie f&uuml;r die Textfelder das Pr&auml;fix <b>txt <\/b>und f&uuml;r die Kontrollk&auml;stchen das Pr&auml;fix <b>chk <\/b>voranstellen.<\/p>\n<p>Zu allen Feldern, die eine Angabe in Form eines Speicherorts erwarten, f&uuml;gen Sie eine Schaltfl&auml;che mit drei Punkten (&#8230;) als Beschriftung hinzu.<\/p>\n<p>Diese hei&szlig;en <b>cmdDatenbank <\/b>(zum Ermitteln der aktuellen Datebank), <b>cmdMSAccess <\/b>(zum Ermitteln der Datei <b>MSAccess.exe<\/b>), <b>cmdVerknuepfung <\/b>(zum Eingeben des Namens der zu erstellenden Verkn&uuml;pfung), <b>cmdZielKomprimierung <\/b>(f&uuml;r die Datei, die als Ergebnis einer Komprimierung entsteht) und <b>cmdZielKonvertierung <\/b>f&uuml;r das Ergebnis einer Konvertierung.<\/p>\n<p><b>Formular starten<\/b><\/p>\n<p>Um dem Benutzer die Arbeit zu erleichtern, wollen wir, wo m&ouml;glich, direkt entsprechende Standardwerte einsetzen.  Davon sind die drei Textfelder <b>txtSpeicherort<\/b>, <b>txtPfadAccess <\/b>und <b>txtPfadDatenbank <\/b>betroffen. Alle drei zeigen spezielle Pfadangaben an.<\/p>\n<p>Die Zuweisung der Standardwerte geschieht gleich beim &ouml;ffnen des Formulars durch die Ereignisprozedur, die durch das Ereignis <b>Beim Laden <\/b>des Formulars ausgel&ouml;st wird. Diese Prozedur, die Sie in Listing 2 finden, enth&auml;lt drei Anweisungen:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Load()\r\n     Me!txtSpeicherort.DefaultValue = Chr(34) & CurrentDb.Name & Chr(34)\r\n     Me!txtPfadAccess.DefaultValue = Chr(34) & SysCmd(acSysCmdAccessDir) & \"MSAccess.exe\" & Chr(34)\r\n     Me!txtPfadDatenbank.DefaultValue = Chr(34) & CurrentDb.Name & Chr(34)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Einstellen der Standardwerte f&uuml;r die drei Textfelder txtSpeicherort, txtPfadAccess und txtPfadDatenbank<\/span><\/b><\/p>\n<ul>\n<li>Die Schaltfl&auml;che <b>txtSpeicherort <\/b>wird mit dem aktuellen Pfad der Datenbank gef&uuml;llt, der mit <b>CurrentDb.Name <\/b>ermittelt wird.<\/li>\n<li>Die ausf&uuml;hrbare Datei <b>MSAccess.exe <\/b>k&ouml;nnen Sie aus dem Ergebnis der Funktion <b>SysCmd(acSysCmdAccessDir)<\/b>, die das Verzeichnis dieser Datei liefert, und dem Dateinamen <b>MSAccess.exe <\/b>zusammenstellen.<\/li>\n<li>Schlie&szlig;lich fehlt noch der Name f&uuml;r die zu erstellende Verkn&uuml;pfung. Diesen belegen wir ebenfalls mit dem Namen der aktuell ge&ouml;ffneten Datenbank vor, also mit <b>CurrentDb.Name<\/b>. Sp&auml;ter wird diese Datei noch um die Dateiendung <b>.lnk <\/b>erweitert, damit diese als Verkn&uuml;pfung interpretiert wird.<\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Da alle drei Ausdr&uuml;cke als Werte f&uuml;r die Eigenschaft <b>Standardwert <\/b>(unter VBA <b>DefaultValue<\/b>) der Textfelder angelegt werden sollen, m&uuml;ssen wir diese au&szlig;erdem noch in Anf&uuml;hrungszeichen einfassen. Dies k&ouml;nnen wir enweder mit einem Ausdruck wie <b>&#8222;&#8220;&#8220;&#8220; &#038; &#8230; &#038; &#8222;&#8220;&#8220;&#8220; <\/b>erledigen oder das Anf&uuml;hrungszeichen durch die Funktion <b>Chr(34) <\/b>abbilden.<\/p>\n<p><b>Pfade schnell ausw&auml;hlen<\/b><\/p>\n<p>Damit der Benutzer diese Pfade leicht anpassen kann, haben wir diesen die bereits oben beschriebenen Schaltfl&auml;chen zur Seite gestellt. Die Schaltfl&auml;che neben dem Textfeld <b>txtPfadDatenbank <\/b>hei&szlig;t beispielsweise <b>cmdDatenbank <\/b>und l&ouml;st f&uuml;r das Ereignis <b>Beim Klicken <\/b>die Prozedur aus Listing 3 aus.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdDatenbank_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strStartdir<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDatenbank<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtPfadDatenbank) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strStartdir = Me!txtPfadDatenbank\r\n         strStartdir = VerzeichnisAusPfad(strStartDir)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strStartdir = CurrentProject.Path\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strDatenbank = OPENFILENAME(strStartdir, \"Datenbank ausw&auml;hlen\", _\r\n         \"Access-Datenbank (*.mdb;*.accdb;*.mde;*.accde;*.mda;*.accda)|Alle Dateien(*.*)\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strDatenbank) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtPfadDatenbank = strDatenbank\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 3: Schaltfl&auml;che zum Anzeigen eines Datei ausw&auml;hlen-Dialogs<\/span><\/b><\/p>\n<p>Die Prozedur pr&uuml;ft, ob das Textfeld <b>txtPfadDatenbank <\/b>bereits einen Wert enth&auml;lt. Falls ja, wird dieser Wert in die Variable <b>strStartDir <\/b>&uuml;bernommen. Dort erfolgt eine weitere Pr&uuml;fung: Handelt es sich bei dem Inhalt von <b>strStartDir <\/b>n&auml;mlich um einen kompletten Pfad inklusive Dateiname, soll dieser noch entfernt werden.<\/p>\n<p>Die Pr&uuml;fung und das Entfernen des Dateinamens erledigt eine kleine Hilfsfunktion, die wie in Listing 4 aussieht und im Modul <b>mdlDateifunktionen <\/b>zu finden ist. Diese Funktion pr&uuml;ft, ob die <b>Dir<\/b>-Funktion f&uuml;r den &uuml;bergebenen Pfad mit dem Parameter <b>vbDirectory <\/b>den Punkt (<b>.<\/b>) als Ergebnis zur&uuml;ckliefert. Dies deutet darauf hin, dass es sich bereits um eine reine Verzeichnisangabe handelt. Anderenfalls liefert <b>Dir <\/b>den Namen der Datei des Pfades zur&uuml;ck. In diesem Fall ermittelt die Funktion den Teil des Pfades bis zum ersten Backslash-Zeichen (<b>\\<\/b>) von hinten und gibt diesen als Funktionswert zur&uuml;ck.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>VerzeichnisAusPfad(ByVal strPfad<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Dir(strPfad, vbDirectory) = \".\"<span style=\"color:blue;\"> Then<\/span>\r\n         strPfad = <span style=\"color:blue;\">Left<\/span>(strPfad, <span style=\"color:blue;\">InStrRev<\/span>(strPfad, \"\\\"))\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     VerzeichnisAusPfad = strPfad\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 4: Funktion zum Extrahieren des Verzeichnisses aus einem Dateipfad<\/span><\/b><\/p>\n<p>Ist <b>txtPfadDatenbank <\/b>leer, f&uuml;llt die Prozedur das mit <b>CurrentProject.Path <\/b>ermittelte Verzeichnis der aktuellen Anwendung in diese Variable.<\/p>\n<p>Danach verwendet die Prozedur die Funktion <b>OpenFileName <\/b>aus dem Modul <b>mdlDateifunktionen<\/b>, um einen <b>Datei &ouml;ffnen<\/b>-Dialog anzuzeigen. Die gew&auml;hlte Datei landet nach dem Schlie&szlig;en dieses Dialogs in der Variablen <b>strDatenbank<\/b> und dann im Textfeld <b>txtPfadDatenbank<\/b>.<\/p>\n<p>&auml;hnlich sieht es beim Textfeld <b>txtPfad-MS-Access <\/b>aus. Hier sorgt die Schaltfl&auml;che <b>cmdMSAccess <\/b>f&uuml;r die Anzeige des <b>Datei &ouml;ffnen<\/b>-Dialogs.<\/p>\n<p><b>Verkn&uuml;pfungs-Ziel ermitteln<\/b><\/p>\n<p>F&uuml;r das Ermitteln der Verkn&uuml;pfung ist eine etwas andere Prozedur n&ouml;tig. Diese wird durch einen Mausklick auf die Schaltfl&auml;che <b>cmdVerknuep-fung <\/b>ausgel&ouml;st. Die entsprechende Prozedur sieht wie in Listing 5 aus. Sie pr&uuml;ft wiederum, ob <b>txtSpeicherort <\/b>bereits gef&uuml;llt ist. Falls ja, wird der Speicherort aus dem Textfeld in der Variablen <b>strSpeicherort <\/b>abgelegt. Dann nutzt die Prozedur wiederum die Funktion <b>VerzeichnisAusPfad<\/b>, um das Verzeichnis zu ermitteln. Diesmal ben&ouml;tigen wir aber zus&auml;tzlich auch noch den Dateinamen.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdVerknuepfung_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strSpeicherort<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strVerzeichnis<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strDateiname<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtSpeicherort) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         strSpeicherort = Me!txtSpeicherort\r\n         strVerzeichnis = VerzeichnisAusPfad(strSpeicherort)\r\n         strDateiname = DateiAusPfad(strSpeicherort)\r\n     <span style=\"color:blue;\">Else<\/span>\r\n         strVerzeichnis = CurrentProject.Path\r\n         strDateiname = CurrentProject.Name\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strSpeicherort = GetSaveFile(strVerzeichnis, strDateiname, , \"Verkn&uuml;pfung anlegen unter:\")\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(strSpeicherort) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         Me!txtSpeicherort = strSpeicherort\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 5: Diese Prozedur hilft bei der Ermittlung des Speicherorts f&uuml;r die Verkn&uuml;pfung.<\/span><\/b><\/p>\n<p>Dabei hilft uns eine weitere Hilfsfunktion namens <b>DateiAusPfad<\/b>, die Sie in Listing 6 finden. Diese Funktion arbeitet fast genauso wie die Funktion <b>VerzeichnisAusPfad<\/b>, nur dass sie den Teil des Pfades hinter dem ersten Backslash-Zeichen von hinten ermittelt und zur&uuml;ckgibt.<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>DateiAusPfad(ByVal strPfad<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Not<\/span> Dir(strPfad, vbDirectory) = \".\"<span style=\"color:blue;\"> Then<\/span>\r\n         strPfad = <span style=\"color:blue;\">Mid<\/span>(strPfad, <span style=\"color:blue;\">InStrRev<\/span>(strPfad, \"\\\") + 1)\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     DateiAusPfad = strPfad\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 6: Funktion zum Extrahieren des Dateinamens aus einem Dateipfad<\/span><\/b><\/p>\n<p>Wenn <b>txtSpeicherort <\/b>noch leer ist, ermittelt die Prozedur die Werte f&uuml;r die beiden Variablen <b>strVerzeichnis <\/b>und <b>strDateiname <\/b>mit den Funktionen <b>CurrentProject.Path <\/b>und <b>CurrentProject.Name<\/b>.<\/p>\n<p>Mit diesen Informationen ausgestattet, geht es an die Funktion <b>GetSaveFile<\/b>. Diese erwartet den beim &ouml;ffnen anzuzeigenden Pfad sowie einen Dateinamen, der als Standard vorgegeben wird. Wenn Sie diese Schaltfl&auml;che beispielsweise von einer Datenbank namens <b>Test.mdb <\/b>aus anklicken, erscheint der Dialog aus Bild 9 mit dem entsprechend vorausgew&auml;hlten Verzeichnis und vorgegebenen Dateinamen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2014_02\/pic_931_009.png\" alt=\"Dialog zum Ermitteln des Namens der Verkn&uuml;pfung\" width=\"575\" height=\"497,0633\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Dialog zum Ermitteln des Namens der Verkn&uuml;pfung<\/span><\/b><\/p>\n<p><b>Ziele f&uuml;r komprimierte und konvertierte Datenbanken<\/b><\/p>\n<p>Wenn Sie die Optionen zum Komprimieren oder Konvertieren von Datenbanken aktivieren, schalten Sie damit auch die Textfelder zur Angabe der Pfade der Zieldatenbanken frei (diese ist f&uuml;r das Konvertieren Pflicht, beim Komprimieren wird bei fehlender Angabe der Zieldatenbank die bestehende Datenbank &uuml;berschrieben).<\/p>\n<p>Auch diese beiden Textfelder sind mit Schaltfl&auml;chen ausgestattet, die dem Benutzer die Auswahl der Zieldatenbanken erleichtern. Die beiden Schaltfl&auml;chen <b>cmdZielKomprimierung <\/b>und <b>cmdZielKonvertierung <\/b>l&ouml;sen Prozeduren aus, die genauso wie die durch die Schaltfl&auml;che <b>cmdVerknuepfung <\/b>ausgel&ouml;ste Prozedur arbeiten.<\/p>\n<p><b>Konfigurationen verwalten<\/b><\/p>\n<p>Das Kombinationsfeld <b>cboKonfigurationen <\/b>dient zur Auswahl der vorhandenen Konfigurationen. Es verwendet die folgende Abfrage als Datensatzherkunft:<\/p>\n<pre>SELECT KonfigurationID, Bezeichnung \r\nFROM tblKonfigurationen \r\nORDER BY Bezeichnung;<\/pre>\n<p>Damit es nur die Bezeichnungen und nicht die Prim&auml;rschl&uuml;sselwerte anzeigt, stellen Sie au&szlig;erdem die beiden Eigenschaften <b>Spaltenanzahl <\/b>und <b>Spaltenbreiten <\/b>auf die Werte <b>2 <\/b>und <b>0cm <\/b>ein. Bevor Sie damit allerdings &uuml;berhaupt Konfigurationen verwalten k&ouml;nnen, m&uuml;ssen Sie zun&auml;chst einmal eine erste Konfiguration erstellen. Dies erledigen Sie mit einem Mausklick auf die Schaltfl&auml;che <b>cmdNeu<\/b>. F&uuml;r diese hinterlegen Sie eine Ereignisprozedur, die durch das Ereignis <b>Beim Klicken <\/b>ausgel&ouml;st wird und wie folgt aussieht:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdNeu_Click()\r\n     DoCmd.GoToRecord acDataForm, _\r\n         Me.Name, acNewRec\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die einzige Anweisung dieser Prozedur zeigt einen neuen Datensatz im Formular an.<\/p>\n<p>Dabei werden die drei Textfelder <b>txtSpeicherort<\/b>, <b>txtPfadDatenbank <\/b>und <b>txtPfadAccess <\/b>mit den in der Ereignisprozedur <b>Form_Load <\/b>definierten Standardwerten vorbelegt.<\/p>\n<p>Wenn Sie den Datensatz speichern, etwa indem Sie zu einem anderen Datensatz wechseln oder die Tastenkombination <b>Strg + S <\/b>bet&auml;tigen, l&ouml;st dies das Ereignis <b>Nach Aktualisierung <\/b>des Formulars aus. Hinter diesem verbirgt sich die folgende Ereignisprozedur:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_AfterUpdate()\r\n     Me!cboKonfigurationen.Requery\r\n     Me!cboKonfigurationen = _\r\n         Me!KonfigurationID\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Die Prozedur aktualisiert die Datenherkunft des Kombinationsfeldes <b>cboKonfigurationen <\/b>und stellt es auf die aktuell im Formular angezeigte Konfiguration ein. Wenn der Benutzer nun einen der bereits vorhandenen Eintr&auml;ge im Kombinationsfeld <b>cboKonfigurationen <\/b>ausw&auml;hlt, l&ouml;st dies die Ereignisprozedur aus Listing 7 aus. Diese verschiebt den Datensatzzeiger im Formular auf den im Kombinationsfeld ausgew&auml;hlten Datensatz.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cboKonfigurationen_AfterUpdate()\r\n     Me.Recordset.FindFirst \"KonfigurationID = \" & Me!cboKonfigurationen\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 7: Anzeigen des im Kombinationsfeld ausgew&auml;hlten Datensatzes im Formular<\/span><\/b><\/p>\n<p><b>Aktionen beim Anzeigen einer Konfiguration<\/b><\/p>\n<p>Das Kombinationsfeld soll auch beim Anzeigen eines Datensatzes im Formular (was in der Regel nur beim &ouml;ffnen des Formulars geschieht &#8211; die &uuml;brigen Datensatzwechsel werden ja durch die Auswahl eines Eintrags im Kombinationsfeld angesto&szlig;en) gleich den entsprechenden Eintrag anzeigen. Dies erledigen wir mit der Ereignisprozedur, die durch das Ereignis <b>Beim Anzeigen <\/b>des Formulars ausgel&ouml;st wird. Die Prozedur sieht wie folgt aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>Form_Current()\r\n     Me!cboKonfigurationen = _\r\n         Me!KonfigurationID\r\n     Me!txtOptionCompactZiel.Enabled = _\r\n         Me!chkOptionCompact\r\n     Me!txtOptionConvertZiel.Enabled = _\r\n         Me!chkOptionConvert\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p>Sie aktualisiert also nicht nur den Wert des Kombinationsfeldes, sondern erledigt noch zwei weitere Aufgaben: Sie pr&uuml;ft die Werte der beiden Kontrollk&auml;stchen <b>chkOptionCompact <\/b>und <b>chkOptionConvert <\/b>und aktiviert oder deaktivert die beiden Textfelder <b>txtOptionCompactZiel <\/b>und <b>txtOptionConvertZiel <\/b>&#8211; je nachdem, ob die Kontrollk&auml;stchen aktiviert oder deaktiviert sind.<\/p>\n<p>Dies soll auch geschehen, wenn der Benutzer die Kontrollk&auml;stchen <b>chkOptionCompact<\/b> und <b>chkOptionConvert <\/b>selbst aktiviert oder deaktiviert. F&uuml;r das Kontrollk&auml;stchen <b>chkOptionCompact <\/b>&uuml;bernimmt dies die Prozedur aus Listing 8.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>chkOptionCompact_AfterUpdate()\r\n     Me!txtOptionCompactZiel.Enabled = Me!chkOptionCompact\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 8: Aktivieren oder Deaktivieren des Textfeldes f&uuml;r die komprimierte Datei<\/span><\/b><\/p>\n<p>Ganz &auml;hnlich sieht die Prozedur aus, die das Textfeld <b>txtOptionConvertZiel<\/b> in Abh&auml;ngigkeit vom Wert des Kontrollk&auml;stchens <b>chkOptionConvert <\/b>aktiviert oder deaktiviert (siehe Listing 9).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>chkOptionConvert_AfterUpdate()\r\n     Me!txtOptionConvertZiel.Enabled = Me!chkOptionConvert\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 9: Aktivieren oder Deaktivieren des Textfeldes f&uuml;r die konvertierte Datei<\/span><\/b><\/p>\n<p><b>L&ouml;schen einer Konfiguration<\/b><\/p>\n<p>Wenn der Benutzer eine Konfiguration nicht weiter ben&ouml;tigt, kann er diese mit dem Kombinationsfeld ausw&auml;hlen und sie mit einem Klick auf die Schaltfl&auml;che <b>cmdLoeschen <\/b>aus der Tabelle <b>tblKonfigurationen <\/b>der Add-In-Datenbank l&ouml;schen. Dies erledigt die Ereignisprozedur aus Listing 10, die sich zun&auml;chst r&uuml;ckversichert, ob die Konfiguration tats&auml;chlich gel&ouml;scht werden soll, und erst dann den aktuellen Datensatz im Formular l&ouml;scht.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdLoeschen_Click()\r\n     If <span style=\"color:blue;\">MsgBox<\/span>(\"Aktuelle Konfiguration l&ouml;schen\", vbYesNo + vbExclamation, _\r\n             \"L&ouml;schen\") = vbYes Then\r\n         RunCommand acCmdDeleteRecord\r\n         Me!cboKonfigurationen.Requery\r\n         Me!cboKonfigurationen = Me!cboKonfigurationen.ItemData(0)\r\n         Me.Recordset.FindFirst \"KonfigurationID = \" & Me!cboKonfigurationen\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 10: L&ouml;schen der aktuellen Konfiguration<\/span><\/b><\/p>\n<p>Anschlie&szlig;end aktualisiert sie die Datensatzherkunft des Kombinationsfeldes <b>cboKonfigurationen<\/b> und stellt dieses auf den ersten verf&uuml;gbaren Eintrag ein.<\/p>\n<p>Die <b>FindFirst<\/b>-Methode des <b>Recordset<\/b>-Objekts des Formulars sorgt daf&uuml;r, dass auch das Formular den im Kombinationsfeld ausgew&auml;hlten Datensatz anzeigt.<\/p>\n<p><b>Doppelte Bezeichnungen verhindern<\/b><\/p>\n<p>Damit das Kombinationsfeld nur eindeutige Bezeichnungen zur Auswahl anbietet, haben wir das Feld <b>Bezeichnung <\/b>der Tabelle <b>tblKonfigurationen <\/b>bereits mit einem eindeutigen Index versehen.<\/p>\n<p>Wenn der Benutzer dennoch einen bereits vorhandenen Wert f&uuml;r das Textfeld <b>txtBezeichnung <\/b>eingibt und versucht, den Datensatz zu speichern, l&ouml;st dies den Fehler <b>3022 <\/b>aus. Um dies zu verhindern, f&uuml;gen wir f&uuml;r das Ereignis <b>Vor Aktualisierung <\/b>dieses Textfeldes die Ereignisprozedur aus Listing 11 hinzu.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>txtBezeichnung_BeforeUpdate(Cancel<span style=\"color:blue;\"> As Integer<\/span>)\r\n     If DCount(\"Bezeichnung\", \"tblKonfigurationen\", \"Bezeichnung = ''\" & Me!txtBezeichnung _\r\n             & \"'' AND NOT KonfigurationID = \" & Me!konfigurationID) = 1 Then\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Es ist bereits eine Konfiguration mit dem Namen ''\" & Me!txtBezeichnung & \"'' vorhanden. \" _\r\n             & \"Bitte geben Sie eine andere Bezeichnung ein.\"\r\n         Cancel = <span style=\"color:blue;\">True<\/span>\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 11: Pr&uuml;fung, ob die in txtBezeichnung eingegebene Bezeichnung schon vorhanden ist<\/span><\/b><\/p>\n<p><b>Verkn&uuml;pfung erstellen<\/b><\/p>\n<p>Fehlt nur noch die Prozedur, die durch einen Mausklick auf die Schaltfl&auml;che <b>cmdErstellen <\/b>ausgel&ouml;st wird (siehe Listing 12).<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdErstellen_Click()\r\n     <span style=\"color:blue;\">Dim <\/span>strArgumente<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionConvert And <span style=\"color:blue;\">Len<\/span>(Nz(Me!txtOptionConvertZiel)) = 0<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">MsgBox<\/span> \"Bitte geben Sie die Zieldatenbank f&uuml;r die Konvertierung an.\", _\r\n             vbOKOnly + vbExclamation, \"Konvertierung\"\r\n         Me!txtOptionConvertZiel.SetFocus\r\n         <span style=\"color:blue;\">Exit Sub<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Dir(Me!txtSpeicherort & \".lnk\")) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n         If <span style=\"color:blue;\">MsgBox<\/span>(\"Verkn&uuml;pfung ist bereits vorhanden. &uuml;berschreiben\", vbYesNo + vbExclamation, _\r\n                 \"Verkn&uuml;pfung vorhanden.\") = vbNo Then\r\n             <span style=\"color:blue;\">MsgBox<\/span> \"Die Verkn&uuml;pfung wurde nicht erstellt.\"\r\n             <span style=\"color:blue;\">Exit Sub<\/span>\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     strArgumente = strArgumente & \" \" & Chr(34) & Me!txtPfadDatenbank & Chr(34)\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionExcl<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/excl\"\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionRo<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/ro\"\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionProfile) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/profile \" & Me!txtOptionProfile\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionCompact<span style=\"color:blue;\"> Then<\/span>\r\n         strArgumente = strArgumente & \" \/compact\"\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionCompactZiel) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             strArgumente = strArgumente & \" \" & Chr(34) & Me!txtOptionCompactZiel & Chr(34)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionConvert<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionConvertZiel) &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n             strArgumente = strArgumente & \" \/convert\"\r\n             strArgumente = strArgumente & \" \" & Chr(34) & Me!txtOptionConvertZiel & Chr(34)\r\n         <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">End If<\/span>\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionX) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/x \" & Me!txtOptionX\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionCmd) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/cmd \" & Me!txtOptionCmd\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionNoStartup<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/nostartup\"\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionUser) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/user \" & Me!txtOptionUser\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionPwd) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/pwd \" & Me!txtOptionPwd\r\n     <span style=\"color:blue;\">If <\/span><span style=\"color:blue;\">Len<\/span>(Me!txtOptionWrkgrp) &gt; 0<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/wrkgrp \" & Me!txtOptionWrkgrp\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionRuntime<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/runtime\"\r\n     <span style=\"color:blue;\">If <\/span>Me!chkOptionRepair<span style=\"color:blue;\"> Then<\/span> strArgumente = strArgumente & \" \/repair\"\r\n     VerknuepfungErstellen Me!txtSpeicherort, Me!txtPfadAccess, strArgumente\r\n     <span style=\"color:blue;\">MsgBox<\/span> \"Die Verkn&uuml;pfung wurde erfolgreich erstellt.\"\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 12: Verkn&uuml;pfung erstellen<\/span><\/b><\/p>\n<p>Diese wertet Schritt f&uuml;r Schritt die Einstellungen im Formular <b>frmVer-knuepfungErstellen <\/b>aus und f&uuml;gt eine entsprechende Verkn&uuml;pfungszeichenfolge zusammen.<\/p>\n<p>Die Prozedur beginnt mit der Pr&uuml;fung, ob das Kontrollk&auml;stchen <b>chkOptionConvert <\/b>aktiviert ist, was bedeutet, dass die Verkn&uuml;pfung beim Aufruf eine Konvertierung in das Format der aktuellen Access-Instanz vornehmen soll. Ist diese aktiviert, muss auch ein Dateiname f&uuml;r die konvertierte Version der Datenbank angegeben werden. Anderenfalls liefert die Prozedur eine entsprechende Meldung, der Fokus landet auf dem Textfeld <b>txtOptionConvertZiel <\/b>und die Prozedur wird abgebrochen.<\/p>\n<p>Eine zweite Pr&uuml;fung kontrolliert, ob es gegebenenfalls schon eine Verkn&uuml;pfung gleichen Namens im angegebenen Verzeichnis gibt. Dazu verwendet die Prozedur die <b>Dir<\/b>-Funktion, die den im Textfeld <b>txtSpeichert <\/b>angegebenen und um die Dateiendung <b>.lnk <\/b>erweiterten Dateinamen pr&uuml;ft. Ist dieser bereits vorhanden, fragt die Prozedur mittels Meldungsfenster, ob die bereits vorhandene Verkn&uuml;pfung &uuml;berschrieben werden soll. Falls der Benutzer dort die Schaltfl&auml;che <b>Nein <\/b>anklickt, erscheint eine Meldung &uuml;ber den Abbruch der Erstellung und die Prozedur wird beendet.<\/p>\n<p>Erst dann beginnt die Zusammenstellung der Argumente. Dabei ist hervorzuheben, dass die Verkn&uuml;pfung nur aus dem Namen der aufzurufenden Anwendung und aus Argumenten besteht. Das erste Argument ist demzufolge bereits der Name der zu &ouml;ffnenden Access-Datenbank.<\/p>\n<p>Dies ist auch der erste Schritt beim Zusammenstellen der Argumente in der daf&uuml;r vorgesehenen Variablen <b>strArgumente<\/b>: Dieses nimmt ein &ouml;ffnendes Anf&uuml;hrungszeichen gefolgt vom Inhalt des Textfeldes <b>txtPfadDatenbank <\/b>und ein schlie&szlig;endes Anf&uuml;hrungszeichen auf. Dies &uuml;bersteigt bereits die Mindestanforderungen an die Argumentliste: Diese darf n&auml;mlich auch leer sein &#8211; zum Beispiel, wenn Sie einfach nur eine Verkn&uuml;pfung zum Starten von Access anlegen m&ouml;chten.<\/p>\n<p>Als zweites Argument f&uuml;gt die Prozedur den Wert <b>\/excl <\/b>zum &ouml;ffnen der Datenbank f&uuml;r den exklusiven Zugriff an &#8211; aber nur, wenn das Kontrollk&auml;stchen <b>chkOptionExcl <\/b>aktiviert ist. Diesem und jedem folgenden Argument wird ein Leerzeichen vorangestellt. Der Parameter <b>\/ro <\/b>zum schreibgesch&uuml;tzten &ouml;ffnen wird auf die gleiche Weise hinzugef&uuml;gt. Beim Parameter <b>\/profile <\/b>pr&uuml;ft die Prozedur zuvor, ob das Textfeld <b>txtOptionProfile <\/b>einen Wert enth&auml;lt, und f&uuml;gt diesen zus&auml;tzlich zu <b>\/profile <\/b>ein. Beim Komprimieren pr&uuml;ft die Prozedur zun&auml;chst nur das Kontrollk&auml;stchen <b>chkOptionCompact <\/b>und f&uuml;gt gegebenenfalls das Argument <b>\/compact <\/b>hinzu. Nur in diesem Fall und wenn zus&auml;tzlich das Textfeld <b>txtOptionCompactZiel <\/b>nicht leer ist, wird auch die Zieldatei hinzugef&uuml;gt. &auml;hnlich erfolgt die Zusammenstellung des Arguments f&uuml;r eine eventuell zu konvertierende Datenbank. Hier muss allerdings zwingend eine Zieldatenbank angegeben werden, deren Vorhandensein aber bereits zu Beginn der Prozedur sichergestellt wurde.<\/p>\n<p>Danach folgen noch die &uuml;brigen Argumente, die auf &auml;hnliche Weise zur Variablen <b>strArgumente <\/b>hinzugef&uuml;gt werden. Schlie&szlig;lich ruft die Prozedur die Funktion <b>VerknuepfungErstellen <\/b>auf, die wie in Listing 13 aussieht und die &uuml;brige Arbeit erledigt. Diese Funktion erwartet die folgenden Parameter:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>VerknuepfungErstellen(strVerknuepfungsname<span style=\"color:blue;\"> As String<\/span>, strAnwendung<span style=\"color:blue;\"> As String<\/span>, _\r\n         <span style=\"color:blue;\">Optional<\/span> strArgumente<span style=\"color:blue;\"> As String<\/span> = \"\")\r\n     <span style=\"color:blue;\">Dim <\/span>objWSHShell<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objShortcut<span style=\"color:blue;\"> As Object<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objWSHShell = CreateObject(\"WScript.Shell\")\r\n     <span style=\"color:blue;\">Set<\/span> objShortcut = objWSHShell.CreateShortcut(strVerknuepfungsname & \".lnk\")\r\n     <span style=\"color:blue;\">With<\/span> objShortcut\r\n         .TargetPath = strAnwendung\r\n         .Arguments = strArgumente\r\n         .Save\r\n     End <span style=\"color:blue;\">With<\/span>\r\n     <span style=\"color:blue;\">Set<\/span> objShortcut = Nothing\r\n     <span style=\"color:blue;\">Set<\/span> objWSHShell = Nothing\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 13: Funktion zum Erstellen einer Verkn&uuml;pfung<\/span><\/b><\/p>\n<ul>\n<li><b>strVerknuepfungsname<\/b>: Dateipfad, unter dem die Verkn&uuml;pfung angelegt werden soll<\/li>\n<li><b>strAnwendung<\/b>: Anwendung, die durch die Verkn&uuml;pfung gestartet werden soll<\/li>\n<li><b>strArgumente<\/b>: Liste der Argumente<\/li>\n<\/ul>\n<p>Beim Aufruf der Funktion &uuml;bergibt die Prozedur den Inhalt des Textfeldes <b>txtSpeicherort <\/b>als ersten Parameter. Dies ist allerdings noch nicht der vollst&auml;ndige Name der zu erstellenden Verkn&uuml;pfungsdatei, denn dieser muss noch um die Dateiendung <b>.lng <\/b>erg&auml;nzt werden.<\/p>\n<p>Als zweiten Parameter &uuml;bergibt die Prozedur den Inhalt des Textfeldes <b>txtPfadAccess<\/b> und als dritten die soeben zuammengestellte und in der Variablen <b>strArgumente <\/b>gespeicherte Argumentliste.<\/p>\n<p>Die Funkt&iacute;on <b>VerknuepfungErstellen <\/b>erstellt dann ein Objekt auf Basis der Klasse <b>WScript.Shell<\/b>. Dieses bietet die Methode <b>CreateShortcut <\/b>an, die zun&auml;chst den Namen der zu erstellenden Verkn&uuml;pfungsdatei samt Verzeichnis als Parameter erwartet. Das von <b>CreateShortcut <\/b>erstellte Objekt referenziert die Funktion mit der Variablen <b>obj-Shortcut<\/b>. Diese stellt Eigenschaften zur &uuml;bergabe der &uuml;brigen Informationen zur Verf&uuml;gung:<\/p>\n<ul>\n<li><b>TargetPath <\/b>nimmt den Namen der zu startenden Anwendung entgegen und<\/li>\n<li><b>Arguments <\/b>die in <b>strArgumente <\/b>gespeicherte Argumentliste.<\/li>\n<\/ul>\n<p>Schlie&szlig;lich speichert die Save-Methode die ge&auml;nderte Verkn&uuml;pfung, die Sie direkt im angegebenen Verzeichnis vorfinden und nutzen k&ouml;nnen.<\/p>\n<p><b>Schlie&szlig;en des Formulars<\/b><\/p>\n<p>Die letzte Prozedur wird durch die Schaltfl&auml;che <b>cmdOK <\/b>ausgel&ouml;st. Sie schlie&szlig;t das Formular und beendet so das Add-In:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>cmdOK_Click()\r\n     DoCmd.Close acForm, Me.Name\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Eine Aufgabe wie das Erstellen einer Verkn&uuml;pfung kommt je nach dem Bet&auml;tigungsgebiet eines Access-Entwicklers mehr oder weniger h&auml;ufig vor. Fest steht jedoch: Es ist immer m&uuml;hsam, die notwendigen Pfade und Parameter zusammen zu schreiben. Mit dem hier vorgestellten Add-In erhalten Sie eine einfache und immer verf&uuml;gbare M&ouml;glichkeit, um schnell eine Verkn&uuml;pfung zu erstellen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>AccessLinker.mda<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{57FA0ED2-E2B6-4376-B105-8444802CF6C0}\/aiu_931.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nervt es Sie nicht auch, wenn Sie alle Jubeljahre mal eine Verkn&uuml;pfung zum Starten einer Datenbankdatei erstellen &#8211; und dann m&uuml;hsam den Pfad zur MSAccess.exe und zur betroffenen Access-Datenbank zusammentippen m&uuml;ssen Mir geht es jedenfalls so. Deshalb habe ich ein schickes, kleines Add-In gebaut, mit dem Sie diese Aufgabe mit wenigen Mausklicks erledigen k&ouml;nnen. Wie es funktioniert und welche Techniken dahinterstecken, erfahren Sie im vorliegenden Beitrag.<\/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":[66022014,662014,44000028],"tags":[],"class_list":["post-55000931","post","type-post","status-publish","format-standard","hentry","category-66022014","category-662014","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>Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen - 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\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen\" \/>\n<meta property=\"og:description\" content=\"Nervt es Sie nicht auch, wenn Sie alle Jubeljahre mal eine Verkn&uuml;pfung zum Starten einer Datenbankdatei erstellen - und dann m&uuml;hsam den Pfad zur MSAccess.exe und zur betroffenen Access-Datenbank zusammentippen m&uuml;ssen Mir geht es jedenfalls so. Deshalb habe ich ein schickes, kleines Add-In gebaut, mit dem Sie diese Aufgabe mit wenigen Mausklicks erledigen k&ouml;nnen. Wie es funktioniert und welche Techniken dahinterstecken, erfahren Sie im vorliegenden Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T21:20:09+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1\" \/>\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=\"24\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen\",\"datePublished\":\"2020-05-22T21:20:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/\"},\"wordCount\":4063,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9ce2db1e80ee44d4be2ccb48a3792fc1\",\"articleSection\":[\"2\\\/2014\",\"2014\",\"Ergonomie und Benutzeroberfl\u00e4che\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/\",\"name\":\"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9ce2db1e80ee44d4be2ccb48a3792fc1\",\"datePublished\":\"2020-05-22T21:20:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9ce2db1e80ee44d4be2ccb48a3792fc1\",\"contentUrl\":\"http:\\\/\\\/vg07.met.vgwort.de\\\/na\\\/9ce2db1e80ee44d4be2ccb48a3792fc1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Verknuepfungen_fuer_Datenbankdateien_erstellen\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen\"}]},{\"@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":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen - 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\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen","og_description":"Nervt es Sie nicht auch, wenn Sie alle Jubeljahre mal eine Verkn&uuml;pfung zum Starten einer Datenbankdatei erstellen - und dann m&uuml;hsam den Pfad zur MSAccess.exe und zur betroffenen Access-Datenbank zusammentippen m&uuml;ssen Mir geht es jedenfalls so. Deshalb habe ich ein schickes, kleines Add-In gebaut, mit dem Sie diese Aufgabe mit wenigen Mausklicks erledigen k&ouml;nnen. Wie es funktioniert und welche Techniken dahinterstecken, erfahren Sie im vorliegenden Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T21:20:09+00:00","og_image":[{"url":"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"24\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen","datePublished":"2020-05-22T21:20:09+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/"},"wordCount":4063,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1","articleSection":["2\/2014","2014","Ergonomie und Benutzeroberfl\u00e4che"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/","url":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/","name":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#primaryimage"},"thumbnailUrl":"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1","datePublished":"2020-05-22T21:20:09+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#primaryimage","url":"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1","contentUrl":"http:\/\/vg07.met.vgwort.de\/na\/9ce2db1e80ee44d4be2ccb48a3792fc1"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Verknuepfungen_fuer_Datenbankdateien_erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Verkn&uuml;pfungen f&uuml;r Datenbankdateien erstellen"}]},{"@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\/55000931","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=55000931"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000931\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}