Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Wer in Access mit verknüpften SQL Server-Tabellen arbeitet, kennt das Problem: Die Verbindungszeichenfolge muss korrekt zusammengesetzt sein, Treiber und Authentifizierungsart müssen stimmen – und bei jeder neuen Datenbank fängt man von vorn an. Dieser Artikel zeigt, wie Du einen eigenen Tab im Backstage-Bereich von Access einrichtest, der Dir das Zusammenbauen der Verbindungszeichenfolge abnimmt.
Beispieldatenbank
Die Beispieldatenbank zum Artikel enthält die Tabelle USysRibbons mit dem XML für den Backstage-Tab sowie das Modul mdlBackstage mit allen Callback-Prozeduren. Du kannst die Datenbank direkt öffnen und den Backstage-Tab sofort verwenden – oder den Code als Vorlage für Deine eigene Datenbank nutzen.
Was der Backstage-Tab leistet
Der Tab SQL Server-Verbindung erscheint im Backstage-Bereich von Access – also in dem Bereich, der sich öffnet, wenn Du auf Datei klickst (siehe Bild 1). Er enthält auf der linken Seite alles, was zum manuellen Aufbau einer Verbindungszeichenfolge nötig ist:

Bild 1: Der Backstage-Tab SQL Server-Verbindung in Access
- Treiber-Auswahl: Ein Dropdown mit den drei gängigsten ODBC-Treibern für SQL Server – ODBC Driver 17 for SQL Server, ODBC Driver 18 for SQL Server und SQL Server Native Client 11.0.
- Servername mit History: Eine ComboBox, die sowohl freie Eingabe als auch die Auswahl aus zuvor verwendeten Servernamen erlaubt. Neue Servernamen werden automatisch gespeichert. Ein Löschen-Button entfernt den aktuell eingetragenen Namen aus der History.
- Datenbanken laden: Ein Button verbindet sich mit dem eingetragenen Server und liest alle verfügbaren Datenbanken aus. Das Ergebnis erscheint als Auswahlliste in der Datenbankname-ComboBox.
- Authentifizierung: Eine RadioGroup schaltet zwischen Windows-Authentifizierung und SQL Server-Authentifizierung um. Bei SQL Server-Authentifizierung werden die Felder für Benutzername und Kennwort automatisch aktiviert.
- Verbindungszeichenfolge: Das Ergebnis aller Eingaben wird in Echtzeit als fertige Verbindungszeichenfolge angezeigt. Zwei Buttons ermöglichen das Testen der Verbindung und das Kopieren in die Zwischenablage.
So verwendest Du den Backstage-Tab
Nach dem Einrichten des Tabs – wie das geht, beschreibt der nächste Abschnitt – öffnest Du ihn über Datei|SQL Server-Verbindung. Beim ersten Aufruf sind alle Felder leer.
- Schritt 1 – Treiber wählen: Wähle im Dropdown ODBC-Treiber den auf Deinem System installierten Treiber aus. Meist ist das ODBC Driver 17 for SQL Server. Der ODBC Driver 18 erfordert zusätzliche Parameter für die verschlüsselte Verbindung, die automatisch ergänzt werden. Falls Du noch den älteren Native Client im Einsatz hast, steht auch SQL Server Native Client 11.0 zur Verfügung (siehe Bild 2).
- Schritt 2 – Servername eingeben: Trage den Servernamen in die ComboBox Servername ein. Das kann ein Rechnername, eine IP-Adresse oder ein benannter Instanzname im Format Rechnername\Instanzname sein. Sobald Du den Namen bestätigst, wird er automatisch in der History gespeichert und beim nächsten Mal in der Auswahlliste angeboten (siehe Bild 3). Nicht mehr benötigte Einträge entfernst Du über den Löschen-Button rechts neben der ComboBox – nach einer Rückfrage wird der aktuell angezeigte Name aus der Liste entfernt.
- Schritt 3 – Authentifizierung festlegen: Wähle zwischen Windows-Authentifizierung und SQL Server-Authentifizierung. Bei Windows-Authentifizierung werden die Felder für Benutzername und Kennwort deaktiviert – die Anmeldedaten des aktuellen Windows-Benutzers werden automatisch verwendet. Bei SQL Server-Authentifizierung werden beide Felder aktiv und müssen ausgefüllt werden (siehe Bild 4).
- Schritt 4 – Datenbanken laden: Klicke auf Datenbanken mit aktuellen Zugangsdaten laden. Das Add-In baut eine Verbindung zum Server auf – ohne Datenbankangabe – und liest alle verfügbaren Datenbanken aus. Das kann je nach Netzwerk und Server einige Sekunden dauern. Die gefundenen Datenbanken erscheinen anschließend in der ComboBox Datenbankname (siehe Bild 5). Du kannst den Datenbanknamen alternativ auch direkt eingeben, falls Du ihn kennst.
- Schritt 5 – Verbindungszeichenfolge prüfen und testen: Die fertig zusammengesetzte Verbindungszeichenfolge erscheint im unteren Bereich der linken Spalte. Sie wird nach jeder Änderung automatisch aktualisiert und zeilenweise dargestellt, damit sie gut lesbar ist (siehe Bild 6). Über Verbindung testen prüfst Du, ob die Verbindung tatsächlich aufgebaut werden kann. Bei Erfolg erscheint eine kurze Bestätigungsmeldung, bei einem Fehler die Fehlerbeschreibung von ADODB – das hilft beim schnellen Eingrenzen von Problemen wie falschem Kennwort, nicht erreichbarem Server oder fehlendem Treiber.

Bild 2: Treiber-Auswahl im Dropdown

Bild 3: Servername-ComboBox mit History-Einträgen

Bild 4: Authentifizierungsoptionen

Bild 5: Datenbankname-ComboBox nach dem Laden der verfügbaren Datenbanken

Bild 6: Fertige Verbindungszeichenfolge mit zeilenweiser Darstellung
Mit In Zwischenablage kopieren übernimmst Du die Zeichenfolge in einem Schritt – ohne die Darstellung im Label manuell markieren zu müssen. Von dort aus kannst Du sie zum Beispiel direkt in den VBA-Editor einfügen oder in eine andere Anwendung übertragen.
Einrichtung in der Datenbank
Der Backstage-Tab wird über die Systemtabelle USysRibbons in der jeweiligen Access-Datenbank eingerichtet. Die Tabelle muss einmalig angelegt werden – die Beispieldatenbank zum Artikel enthält sie bereits. Sie besteht aus drei Feldern: ID (Primärschlüsselfeld mit Autowert), Ribbon RibbonName (Text) und RibbonXml (Memo). In RibbonXml steht das vollständige XML, das den Tab beschreibt. In den Access-Optionen unter Aktuelle Datenbank trägst Du im Feld Name des Menübands den Wert aus RibbonName ein. Nach dem nächsten Öffnen der Datenbank ist der Tab aktiv.
Die Callback-Prozeduren befinden sich im Modul mdlBackstage. Die Verbindungseinstellungen werden in der Windows-Registry unter dem Schlüssel HKCU\Software\VB and VBA Program Settings\amvSQLServerConnection\SQLServer gespeichert. Das hat den Vorteil, dass die Einstellungen datenbankübergreifend gelten – Du musst Servernamen und Zugangsdaten nicht in jeder Datenbank neu eingeben.
Die Servernamen-History wird unter dem Registry-Wert Servernamen als pipe-separierte Liste gespeichert, zum Beispiel:
194.163.171.28|SQLSERVER01|LAPTOP\SQLEXPRESS
XML-Definition für den Backstage-Bereich
Das XML beginnt mit dem üblichen customUI-Wurzelelement, gefolgt von
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="customUI_OnLoad">
<backstage>
<tab id="tabSQLServer"
label="SQL Server-Verbindung"
insertAfterMso="TabInfo"
title="SQL Server-Verbindungszeichenfolgen">
<firstColumn>
...
</firstColumn>
</tab>
</backstage>
</customUI>
Das Attribut onLoad verweist auf eine Callback-Funktion, die beim Laden des Ribbons aufgerufen wird und eine Referenz auf das IRibbonUI-Objekt liefert. Diese Referenz wird in einer Modulvariablen gespeichert und später benötigt, um das Backstage nach Änderungen neu zu zeichnen:
Private m_ribbon As IRibbonUI Public Function customUI_OnLoad(ribbon As IRibbonUI) _ As IRibbonUI Set m_ribbon = ribbon Call ServernamenLaden Call DatenbanknamenLeeren End Function
Alle Callback-Prozeduren kommen in ein Standardmodul namens mdlBackstage. Für die Registry-Speicherung verwendet die Lösung zwei Konstanten:
Public Const cStrAppName As String = _ "amvSQLServerConnection" Public Const cStrSection As String = _ "SQLServer"
Die Registry eignet sich hier gut als Speicherort, weil die Verbindungsdaten datenbankübergreifend verfügbar sein sollen – einmal konfiguriert, stehen sie in jeder Datenbank zur Verfügung, die diesen Backstage-Tab verwendet.
Klassen wie IRibbonUI sind in der Bibliothek Microsoft Office 16.0 Object Library definiert, daher müssen wir noch einen Verweis auf diese Bibliothek zu den Verweisen des VBA-Projekts hinzufügen.
Steuerelemente im Backstage-Tab
Der Tab verwendet eine einzelne Spalte (firstColumn), die in mehrere Gruppen unterteilt ist. Jede Gruppe enthält ein topItems-Element, das die eigentlichen Steuerelemente aufnimmt. Im Backstage stehen nicht alle Steuerelemente des Ribbons zur Verfügung – die wichtigsten für diese Lösung sind dropDown, comboBox, editBox, radioGroup, labelControl, button und layoutContainer.
Ein wesentlicher Unterschied zum Ribbon: Backstage-Callbacks, die einen Wert zurückliefern, verwenden in VBA ByRef-Parameter statt Funktionsrückgabewerten. Die Signatur für einen Text-Callback sieht zum Beispiel so aus:
Public Sub ebServername_GetText(control As IRibbonControl, _ ByRef text) text = GetSetting(cStrAppName, _ cStrSection, "Servername", "") End Sub
Falsche Signaturen führen zu stillen Fehlern – das Steuerelement zeigt einfach nichts an, ohne eine Fehlermeldung zu erzeugen.
Treiber-Auswahl
Die erste Gruppe enthält ein dropDown-Element für die Auswahl des ODBC-Treibers. Die drei verfügbaren Treiber sind im Code fest hinterlegt: ODBC Driver 17 for SQL Server, ODBC Driver 18 for SQL Server und SQL Server Native Client 11.0. Das XML für das Dropdown sieht so aus:
<group id="grpTreiber" label="Treiber">
<topItems>
<dropDown id="ddTreiber" label="ODBC-Treiber"
getItemCount="ddTreiber_GetItemCount"
getItemLabel="ddTreiber_GetItemLabel"
getItemID="ddTreiber_GetItemID"
getSelectedItemIndex=_
"ddTreiber_GetSelectedItemIndex"
onAction="ddTreiber_OnAction"/>
</topItems>
</group>
Die Callbacks für ein dropDown im Backstage folgen einem einheitlichen Muster. GetItemCount liefert die Anzahl der Einträge, GetItemLabel den anzuzeigenden Text für jeden Index, GetItemID eine eindeutige Zeichenkette je Eintrag und GetSelectedItemIndex den aktuell gewählten Index. OnAction wird aufgerufen, wenn der Benutzer einen Eintrag auswählt (siehe Listing 1).
Public Sub ddTreiber_GetItemCount(control As IRibbonControl, ByRef count) count = 3 End Sub Public Sub ddTreiber_GetItemLabel(control As IRibbonControl, index As Integer, ByRef label) label = GetTreiberName(index) End Sub Public Sub ddTreiber_GetItemID(control As IRibbonControl, index As Integer, ByRef id) id = "treiber" & index End Sub Public Sub ddTreiber_GetSelectedItemIndex(control As IRibbonControl, ByRef selectedIndex) selectedIndex = Val(GetSetting(cStrAppName, cStrSection, "TreiberIndex", "0")) End Sub Public Sub ddTreiber_OnAction(control As IRibbonControl, selectedID As String, selectedIndex As Integer) SaveSetting cStrAppName, cStrSection, "TreiberIndex", selectedIndex Call VerbindungszeichenfolgeAktualisieren m_ribbon.Invalidate End Sub
Listing 1: Callbacks für das Treiber-Dropdown
Die Hilfsfunktion GetTreiberName liefert den Treibernamen für einen gegebenen Index und wird später auch beim Zusammenbauen der Verbindungszeichenfolge verwendet:
Private Function GetTreiberName(index As Integer) As String Select Case index Case 0 GetTreiberName = "ODBC Driver 17 for SQL Server" Case 1 GetTreiberName = "ODBC Driver 18 for SQL Server" Case 2 GetTreiberName = "SQL Server Native Client 11.0" Case Else GetTreiberName = "ODBC Driver 17 for SQL Server" End Select End Function
Um die Funktion VerbindungszeichenfolgeAktualisieren kümmern wir uns weiter unten.
Servername mit History
Für den Servernamen kommt eine comboBox zum Einsatz – sie erlaubt sowohl freie Eingabe als auch die Auswahl aus einer Liste zuvor verwendeter Servernamen. Die verwendeten Namen werden pipe-separiert in der Registry gespeichert. Daneben gibt es einen Löschen-Button, mit dem ein Servername aus der History entfernt werden kann. Beide Steuerelemente werden in einem layoutContainer nebeneinander angeordnet:
<group id="grpServer" label="Verbindung">
<topItems>
<layoutContainer id="lcServername"
layoutChildren="horizontal">
<comboBox id="cbServername"
label="Servername"
sizeString="WWWWWWWWWWWWWWWWWWWW"
getText="cbServername_GetText"
onChange="cbServername_OnChange"
getItemCount="cbServername_GetItemCount"
getItemLabel="cbServername_GetItemLabel"
getItemID="cbServername_GetItemID"/>
<button id="btnServernameLoeschen"
label="Löschen"
imageMso="DeleteTable"
onAction=_
"btnServernameLoeschen_OnAction"/>
</layoutContainer>
...
</topItems>
</group>
Die comboBox kennt dieselben Item-Callbacks wie das dropDown, zusätzlich aber getText und onChange für den frei eingebbaren Text. onChange wird sowohl bei freier Eingabe als auch bei Auswahl aus der Liste aufgerufen. Der neue Servername wird dabei automatisch in der History gespeichert, sofern er noch nicht vorhanden ist.
Bevor wir uns die Callbacks anschauen, werfen wir einen Blick auf die Prozeduren, mit denen wir die Servernamen laden und einen neu eingegebenen Servernamen speichern. Diese finden wir in Listing 2.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo
