Wenn Sie eine Datenbank von mehreren Standorten aus nutzen, aber nicht auf den Komfort der Access-Programmierung verzichten wollen, dann gibt es nicht viele Möglichkeiten. Sie können entweder eine SQL Server-Datenbank oder eine MySQL-Datenbank auf einem Internetserver ablegen und für den Zugriff von einer Access-Datenbank aus verfügbar machen. Wie das gelingt, haben wir am Beispiel von MySQL in verschiedenen Beiträgen bereits dargestellt. Der vorliegende Beitrag schließt den Kreis und zeigt, wie Sie von einem Access-Frontend aus auf die MySQL-Datenbank auf dem Internetserver zugreifen und mit den Daten so arbeiten, als würden diese auf dem heimischen Rechner liegen. Wir starten mit einigen Tools, die den Zugriff erleichtern.
Formular zum Zusammenstellen einer Verbindungszeichenfolge
Um von Access aus auf eine MySQL-Datenbank zuzugreifen, benötigen Sie zuerst einmal eine Verbindungszeichenfolge. Um diese zusammenzustellen, wollen wir Ihnen ein praktisches Formular bereitstellen.
In dieses geben Sie die benötigten Daten wie Serveradresse, Datenbankname, Benutzername, Kennwort oder Port ein und prüfen, ob die Verbindung hergestellt werden kann. Damit das Formular komfortabel anzuwenden ist, benötigen wir einige Steuer-elemente, einige Zeilen VBA-Code und auch Tabellen, in denen wir die ermittelten Daten speichern – und auch grundlegende Daten wie die Informationen über die zur Auswahl stehenden Treiber.
Treiber verwalten
Bevor Sie überhaupt von einer Access-Datenbank auf eine MySQL-Datenbank zugreifen können, benötigen Sie einen entsprechenden ODBC-Treiber.
Diesen erhalten Sie vom Datenbankhersteller, in diesem Fall von der folgenden Webseite:
https://dev.mysql.com/downloads/connector/odbc/
Hier finden Sie ODBC-Treiber für verschiedene Versionen vor (siehe Bild 1).
Bild 1: Download des ODBC-Treibers für MySQL
Wenn Sie bereits den Beitrag Access-Datenbank zu MySQL migrieren (www.access-im-unternehmen.de/1229) gelesen haben, kennen Sie schon eine Herausforderung, die auch bei der Auswahl des geeigneten Treibers auf Sie zukommt: Sie müssen zwischen der 32-bit- und der 64-bit-Version wählen.
Wer dabei meint, er müsse sich an der Windows-Version orientieren, die auf dem Zielrechner installiert ist, liegt falsch: Den MySQL-Treiber wählen Sie wie die MySQL Workbench-Version anhand der Variante des installierten Office-Pakets aus. Haben Sie Office in der 32-bit-Version installiert, benötigen Sie also auch den entsprechenden ODBC-Treiber.
Auf unserem Rechner ist die 32-bit-Variante von Office installiert, also wählen wir von der obigen Seite den Download der Datei mysql-connector-odbc-8.0.19-win32.msi. Genau wie beim Download von MySQL Workbench benötigen Sie auch hier einen kostenlosen Zugang bei Oracle.
Nach dem Download installieren wir den Treiber auch direkt. Hierbei können Sie die Standard-einstellungen beibehalten. Beachten Sie, dass Microsoft Access während der Installation nicht gestartet sein darf.
Nach der Installation können Sie auf folgende Weise prüfen, ob Sie den richtigen Treiber installiert haben, je nachdem, ob Sie die 32-bit- oder die 64-bit-Version benötigen. Dazu geben Sie im Windows-Suchfeld ODBC ein und starten das dann erscheinende ODBC-Datenquellen (32-bit) oder ODBC-Datenquellen (64-bit).
In dieser Anwendung wechseln Sie auf die Seite Treiber und prüfen, ob dort ein MySQL-ODBC-Treiber in der soeben installierten Version vorliegt – in unserem Fall die Version 8.0 (siehe Bild 2).
Bild 2: Prüfen, ob der richtige ODBC-Treiber installiert ist
Speichern der Treiberinformationen
Die verschiedenen ODBC-Treiber haben verschiedene Zeichenfolgen, die in der ODBC-Verbindungszeichenfolge zum Einsatz kommen. Damit wir diese nicht fest im Code verdrahten müssen, legen wir eine neue Tabelle namens tblTreiber an, mit der wir diese Zeichenketten speichern können.
Diese Tabelle enthält neben dem Primärschlüsselfeld noch ein Feld namens Treiber, um die Zeichenfolge aufzunehmen, und ein Beschreibungsfeld.
Den Entwurf sehen Sie in Bild 3. Für eine ältere Version des MySQL-Treibers lautet diese Zeichenfolge so:
Bild 3: Entwurf der Tabelle zum Speichern der Treiberinformationen
MySQL ODBC 5.3 ANSI Driver
Wir haben nun allerdings soeben die Version 8.0 des Treibers installiert und die obige Zeichenfolge wird nicht mehr funktionieren. Ob man die 5.3 einfach durch die 8.0 ersetzen kann, werden wir gleich herausfinden. Wir fügen jedenfalls einfach mal einen Datensatz mit dieser Kombination hinzu (siehe Bild 4).
Bild 4: Einträge der Tabelle tblTreiber
Daten zu Verbindungs-zeichen-folgen speichern
Eine Verbindungszeichenfolge erfordert allerdings noch einige weitere Informationen wie etwa den Server, den Datenbanknamen, den Benutzernamen, das Kennwort oder den Port.
Diese wollen wir ebenfalls in einer Tabelle speichern, die wir tblVerbindungszeichenfolgen nennen und die im Entwurf wie in Bild 5 aussieht.
Bild 5: Entwurfsansicht der Tabelle tblVerbindungszeichenfolgen
Formular zum Verwalten der Ver-bin-dungs-zeichen-folgen
Damit der Benutzer die Daten dieser Tabelle komfortabel verwalten kann, stellen wir ihm ein Formular zur Verfügung, das an die Tabelle tblVerbindungszeichenfolgen gebunden ist und wie in Bild 6 aussieht.
Bild 6: Entwurfsansicht des Formulars frmVerbindungszeichenfolgen
Das Kombinationsfeld oben zeigt die Bezeichnungen aus der Tabelle tblVerbindungszeichenfolgen an und stellt die gewählte Verbindungszeichenfolge ein. Dafür sorgt diese Ereignisprozedur:
Private Sub cboSchnellauswahl_AfterUpdate() Me.Recordset.FindFirst "VerbindungszeichenfolgeID = " & Me!cboSchnellauswahl End Sub
In die meisten der übrigen Steuer-ele-mente gibt der Benutzer die gewünschten Werte einfach ein. Diese sind an die entsprechenden Felder der Datensatzquelle des Formulars gebunden.
Es gibt folgende Ausnahmen:
- cboDatenbank: Dient zur Auswahl einer der Datenbanken auf dem Server.
- cboTreiberID: Dient zur Auswahl des Treibers aus der Tabelle tblTreiber.
Datenbanken einlesen und auswählen
Das Kombinationsfeld cboDatenbank soll die Auswahl einer der Datenbanken auf dem im Feld Server angegebenen Server ermöglichen.
Dies ist allerdings erst möglich, wenn die Datenbanken eingelesen wurden. Dazu betätigt man die Schaltfläche rechts neben dem Kombinationsfeld.
Die Schaltfläche heißt cmdDatenbankenEinlesen und löst die Prozedur aus Listing 1 aus.
Private Sub cmdDatenbankenEinlesen_Click() If Len(Nz(Me!txtServer)) = 0 Then MsgBox "Bitte geben Sie den Namen des MySQL-Servers ein." Me!txtServer.SetFocus Exit Sub End If If Len(Nz(Me!cboTreiberID)) = 0 Then MsgBox "Bitte wählen Sie einen Treiber aus." Me!cboTreiberID.SetFocus Exit Sub End If If Len(Nz(Me!txtBenutzername)) = 0 Then MsgBox "Bitte geben Sie einen Benutzernamen ein." Me!txtBenutzername.SetFocus Exit Sub End If If Len(Nz(Me!txtKennwort)) = 0 Then MsgBox "Bitte geben Sie ein Kennwort ein." Me!txtKennwort.SetFocus Exit Sub End If Set Me!cboDatenbank.Recordset = DatenbankenEinlesen End Sub
Listing 1: Die Prozedur cmdDatenbankenEinlesen_Click
Diese fragt ab, ob der Benutzer bereits Daten in die vier Steuer-elemente txtServer, cboTreiber, txtBenutzername und txtKennwort eingegeben hat.
Fehlen die Daten in einem dieser Felder, erscheint eine Meldung, welches Feld noch gefüllt werden muss, und das entsprechende Steuer-element erhält den Fokus. Dann wird die Prozedur beendet. Erst, wenn alle Felder gefüllt sind, wird die Funktion DatenbankenEinlesen aufgerufen und das Ergebnis der Eigenschaft Recordset des Kombinationsfeldes cboDatenbank zugewiesen.
Die Funktion DatenbankenEinlesen finden Sie in Listing 2. Die Funktion schreibt die Verbindungszeichenfolge, die zuvor mit der Funktion VerbindungszeichenfolgeDatenbanken zusammengestellt wurde, in die Variable strVerbindungszeichenfolge.
Private Function DatenbankenEinlesen() As Recordset Dim strSQL As String Dim qdf As DAO.QueryDef Dim strVerbindungszeichenfolge As String strVerbindungszeichenfolge = Me!txtVerbindungszeichenfolge strSQL = "SHOW DATABASES" Set qdf = QueryDefErstellen(strSQL, strVerbindungszeichenfolge) On Error Resume Next DoCmd.Hourglass True Set DatenbankenEinlesen = qdf.OpenRecordset DoCmd.Hourglass False If Not Err.Number = 0 Then MsgBox "Die Verbindung konnte nicht hergestellt werden:" & vbCrLf & Err.Number & " " & Err.Description End If End Function
Listing 2: Die Prozedur DatenbankenEinlesen
In die Variable strSQL füllen wir eine für Access- und SQL Server-gewöhnte Augen etwas ungewöhnliche Abfrage, nämlich die folgende:
SHOW DATABASES
Damit können Sie unter MySQL eine Liste aller Datenbanken des aktuellen Servers ausgeben lassen. Mit strVerbindungszeichenfolge und strSQL füllen wir dann über die Funktion QueryDefErstellen ein neues QueryDef-Objekt namens qdf.
Dieses führen wir mit der OpenRecordset-Methode aus und geben das Ergebnis als Funktionswert zurück.
Die Funktion VerbindungszeichenfolgeDatenbanken liefert eine Verbindungszeichenfolge, die aus den Inhalten der Steuer-elemente txtServer, cboTreiber, txtBenutzername und txtKennwort zusammenstellt wird:
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