Bild 1: Tabelle mit Add-In-Informationen
Die Beiträge RDBMS-Tools: Verbindungen verwalten und RDBMS-Tools: Tabellen verknüpfen stellen zwei praktische Formulare vor, die Sie vor der Benutzung in die Datenbank importieren müssen, bevor Sie diese dort nutzen können. Wenn Sie diese jedoch in verschiedenen Anwendungen einsetzen beziehungsweise immer verfügbar haben möchten, können Sie diese auch in Form von Add-Ins betreiben. Dazu sind allerdings einige änderungen an den Formularen und weitere Ergänzungen notwendig. Welche das sind, zeigen wir Ihnen im vorliegenden Beitrag.
Um die Formulare einer Access-Anwendung als Add-In in anderen Access-Anwendungen verfügbar zu machen, indem Sie diese über das Ribbon-Menü Datenbanktools|Add-Ins|Add-Ins auswählen und anklicken, müssen Sie Access zunächst mitteilen, dass die entsprechenden Einträge dort angezeigt werden sollen. Dazu fügen Sie der Datenbank eine Tabelle namens USysRegInfo hinzu, die wie in Bild 1 aussieht. Im Gegensatz zu einigen anderen Beispielen für Add-Ins, die Sie bisher in Access im Unternehmen kennengelernt haben, wollen wir hier allerdings gleich zwei Add-Ins in einer Add-In-Datei unterbringen.
Bild 1: Tabelle mit Add-In-Informationen
Deshalb gibt es jeden der fünf Einträge der Tabelle USysRegInfo auch zweimal – je einmal für das Add-In mit dem Eintrag RDBMSTools: Tabellen verknüpfen und für das Add-In mit dem Eintrag RDBMS-Tools: Verbindungen verwalten. Die Datensätze der Tabelle entsprechen prinzipiell Name-Wert-Paaren, wobei ValName den Namen und Value den Wert aufnimmt.
Dabei gibt Expression die beim Auswählen des Eintrags auszuführende Funktion an, Library die Datenbank, welche die Funktion enthält, Description liefert eine Beschreibung und Version gibt an, für welchen Access-Datenbanktyp das Add-In geeignet ist.
Der Wert 3 besagt hier, dass das Add-In nur für reine Access-Datenbanken, nicht jedoch für Access-Projekte (.adp-Dateien) zur Verfügung steht.
Nachdem Sie eine Datenbank mit dieser Tabelle ausgestattet und diese mit der Dateiendung .mda/.accda versehen haben, rufen Sie den Add-In-Manager auf (Ribbon-Eintrag Datenbanktools|Add-Ins|Add-Ins|Add-In-Manager). Klicken Sie auf die Schaltfläche Neues hinzufügen… und wählen Sie im folgenden Dialog die Add-In-Datei aus. Anschließend finden Sie diese wie in Bild 2 mit einigen weiteren Informationen im Add-In-Manager in der Liste der verfügbaren Add-Ins vor.
Bild 2: Installieren des neuen Add-Ins
Schließlich tauchen beim nächsten Start von Access zwei neue Einträge in der Liste der verfügbaren Add-Ins auf (s. Bild 3).
Bild 3: Auswahl der beiden neuen Add-Ins
Add-In-Einträge mit Leben füllen
Nun soll der erste Eintrag das Formular frmTabellenVerknuepfen öffnen, das wir im Beitrag RDBMS-Tools: Tabellen verknüpfen vorgestellt haben und der zweite Eintrag das Formular frmVerbindungszeichenfolgen aus dem Beitrag RDBMS-Tools: Verbindungen verwalten.
Dazu fehlt noch eine wichtige Entscheidung: Die beiden Tools greifen ja auf die beiden Tabellen tblVerbindungszeichenfolgen und tblTreiber zu, um die Verbindungszeichenfolgen erstens zu verwalten und zweitens zum Zwecke der Verknüpfung von Tabellen auf diese zuzugreifen. Nun stellt sich die Frage, wo wir diese Tabellen speichern sollen: In der Add-In-Datenbank oder in der Datenbank, in der wir die Verknüpfungen zu den RDBMS-Tabellen anlegen möchten.
Wir entscheiden uns dafür, die Tabellen in der jeweiligen Zieldatenbank zu installieren, damit die Verbindungsdaten für die jeweilige Backend-Datenbank immer direkt im entsprechenden Frontend gespeichert sind. Außerdem können Sie so auch noch VBA-Code zur Anwendung selbst hinzufügen, der sich die Inhalte der Tabelle tblVerbindungszeichenfolgen zunutze macht.
Wir müssen also beim Starten einer der beiden Add-In-Funktionen in der Datei RDBMSTools.mda jeweils prüfen, ob die Tabellen tblVerbindungszeichenfolgen und tblTreiber bereits in der aufrufenden Datenbank enthalten sind, und diese gegebenenfalls dort hinzufügen.
Weiter oben in der Tabelle USysRegInfo haben wir für die beiden Add-Ins die Funktionen AutostartTabellenVerknuepfen und AutostartVerbindungenVerwalten angegeben. Diese werden ausgelöst, wenn der Benutzer eines der Add-Ins über den entsprechenden Ribbon-Eintrag aufruft.
Beide sollen beim Start zunächst eine Prozedur namens TabellenErstellen aufrufen, die sich um die Tabellen kümmert, und dann erst das Formular für die jeweilige Add-In-Funktion. Die beiden VBA-Funktionen sehen wir folgt aus:
Public Function AutostartTabellenVerknuepfen() TabellenErstellen DoCmd.OpenForm "frmTabellenVerknuepfen" End Function Public Function AutostartVerbindungenVerwalten() TabellenErstellen DoCmd.OpenForm "frmVerbindungszeichenfolgen" End Function
Die Prozedur TabellenErstellen finden Sie in Listing 1. Die Prozedur legt zunächst den Namen der Zieltabelle mit tblVerbindungszeichenfolgen fest und versucht, bei deaktivierter Fehlerbehandlung eine Tabelle dieses Namens in der aufrufenden Datenbank zu referenzieren. Dabei ist zu beachten, dass wir die aufrufende Datenbank mit der Variablen dbClient referenzieren, die wir mit der Funktion CurrentDb füllen.
Public Function TabellenErstellen() Dim dbClient As DAO.Database, dbAddIn As DAO.Database Dim strTabelle As String Dim tdf As DAO.TableDef, idx As DAO.Index, fld As DAO.Field Set dbClient = CurrentDb Set dbAddIn = CodeDb On Error Resume Next strTabelle = "tblVerbindungszeichenfolgen" Set tdf = dbClient.TableDefs(strTabelle) On Error GoTo 0 If tdf Is Nothing Then dbClient.Execute "SELECT * INTO " & strTabelle & " FROM tblVerbindungszeichenfolgen IN ''" & dbAddIn.Name _ & "''", dbFailOnError dbClient.TableDefs.Refresh Set tdf = dbClient.TableDefs(strTabelle) Set idx = tdf.CreateIndex("PK" & strTabelle) With idx Set fld = idx.CreateField("VerbindungszeichenfolgeID") .Fields.Append fld .Primary = True End With tdf.Indexes.Append idx Set idx = tdf.CreateIndex("UK" & strTabelle) With idx Set fld = idx.CreateField("Bezeichnung") .Fields.Append fld .Unique = True End With tdf.Indexes.Append idx dbClient.Execute "DELETE FROM " & strTabelle, dbFailOnError End If Set tdf = Nothing On Error Resume Next strTabelle = "tblTreiber" Set tdf = dbClient.TableDefs(strTabelle) On Error GoTo 0 If tdf Is Nothing Then dbClient.Execute "SELECT * INTO " & strTabelle & " FROM tblTreiber IN ''" & dbAddIn.Name & "''", dbFailOnError dbClient.TableDefs.Refresh Set tdf = dbClient.TableDefs(strTabelle) Set idx = tdf.CreateIndex("PK" & strTabelle) With idx Set fld = idx.CreateField("TreiberID") .Fields.Append fld .Primary = True End With tdf.Indexes.Append idx End If Application.RefreshDatabaseWindow End Function
Listing 1: Prozedur zum Erstellen der Tabellen für die Verbindungen und Treiberinformationen
Die Add-In-Datenbank speichern wir in der Variablen dbAddIn, und zwar über die Funktion CodeDb. Wenn die Variable tdf nach dem Versuch, diese mit einem Verweis auf die Tabelle tblVerbindungszeichenfolgen zu füllen, noch leer ist, soll die Prozedur diese neu anlegen. Diese könnte man komplett per DAO erledigen und dabei Feld für Feld anlegen.
Da diese Tabelle jedoch schon in der Add-In-Datenbank vorliegt, kopieren wir einfach die komplette Tabelle aus der Add-In-Datenbank in die Client-Datenbank – und zwar mit einer Version der SELECT…INTO-Anweisung, die ihre Datenquelle über die IN-Klausel aus einer anderen Datenbank bezieht – in diesem Fall aus der Add-In-Datenbank, deren Pfad wir mit der Eigenschaft Name der Variablen dbAddIn ermitteln.
Auf diese Weise kopieren wir das Grundgerüst der Tabelle in die Zieldatenbank, also die Felder mit dem korrekten Felddatentyp sowie die Inhalte. Die Inhalte löschen wir weiter unten wieder, da der Benutzer ja seine eigenen Verbindungszeichenfolgen anlegen soll.
Beim Kopieren der Tabelle mit SELECT…INTO werden die Indizes leider nicht mit übertragen. Daher müssen wir dies noch per Code erledigen. Dazu aktualisiert die Prozedur zunächst die TableDefs-Auflistung der Client-Datenbank mit der Refresh-Methode.
Dann referenziert sie die neue Tabelle mit der Variablen tdf und erstellt ein neues Index-Objekt für diese Tabelle. Sie legt ein neues Field-Objekt mit CreateField für das Index-Objekt idx an und weist diesem den Namen des Feldes der Tabelle zu, das als Primärschlüssel verwendet werden soll – also VerbindungszeichenfolgeID.
Dieses Field-Objekt hängt sie dann an die Fields-Auflistung von idx an und stellt seine Eigenschaft Primary auf True ein.
Auf ähnliche Weise fügt die Prozedur nun noch den eindeutigen Index zum Feld Bezeichnung hinzu. Hier stellt sie allerdings die Eigenschaft Unique auf den Wert True ein. Danach löscht die Prozedur alle Datensätze der Tabelle.
Die folgenden Zeilen übertragen dann die Tabelle tblTreiber in die Zieldatenbank. Auch hier legt sie nachträglich noch ein Primärschlüsselfeld fest. Schließlich aktualisiert die Prozedur noch den Navigationsbereich, damit die hinzugefügten Tabellen auch angezeigt werden.
übrigens: Die Autowert-Eigenschaft wird im Gegensatz zu den Indizes sehr wohl mit der SELECT…INTO-Anweisung übertragen, um diese brauchen wir uns also nicht zu kümmern.
Damit haben wir nun schon einmal die beiden Tabellen tblVerbindungszeichenfolgen und tblTreiber in die Zieldatenbank kopiert.
Nun fehlen noch ein paar Anpassungen, damit die beiden Formulare auch auf die Daten in diesen beiden Tabellen zugreifen und nicht auf die im Add-In befindlichen Tabellen.
Formular frm-Ver-bin-dungs-zeichen-folgen anpassen
Das Formular frmVerbindungszeichenfolgen bezieht an zwei Stellen Daten aus den Tabellen tblVerbindungszeichenfolgen: als Datenherkunft des Formulars selbst und als Datensatzherkunft des Kombinationsfeldes cboSchnellauswahl.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo