Von Access nach MySQL, Teil 2

In der letzten Ausgabe des Magazins haben Sie erfahren, wie man mit einem Access-Backend und dem kostenlosen Migration Toolkit auf einen MySQL-Server umziehen kann. Sie haben vielleicht das Beispiel nachvollzogen und die Datenbank Südsturm von Access im Unternehmen nun in MySQL-Tabellen vorliegen. Nach diesem Schritt steht die Anbindung dieser Tabellen an ein Access-Frontend an. Wie Sie dabei vorgehen und wie auftretende Probleme gelöst werden können, das soll der folgende Beitrag erläutern.

Sie müssen weder zwingend den ersten Teil dieser Serie verinnerlicht, noch das dort vorgestellte Südsturm-Beispiel durchgespielt haben.

Denn zu den diesen Beitrag begleitenden Dateien gehört auch ein SQL-Skript Suedsturm_Backup.sql, mit dem Sie die MySQL-Datenbank samt referenzieller Integrität herstellen können.

Weil dies ein Vorgang ist, den Sie auch später immer mal wieder bei der Arbeit mit MySQL benötigen, sei das Sichern einer MySQL-Datenbank in einer einzigen Datei hier zunächst kurz aufgezeigt.

Backup erstellen

Starten Sie den MySQL Administrator aus der GUI-Suite von MySQL [2]. Sie werden mit einem Login-Dialog konfrontiert, in dem Sie die notwendigsten Anmeldedaten angeben (siehe Bild 1).

missing image file

Bild 1: Anmelden an MySQL Administrator für eine Verwaltungs-Session

Interessant sind dabei nur die Felder Server Host, Nutzername und Passwort. Für Server Host ist bei lokal installiertem MySQL-Server localhost anzugeben und ansonsten der Name des Servers oder dessen IP-Nummer.

Als Benutzername verwenden wir zunächst den immer existierenden Benutzer root, dessen Passwort bereits beim Installieren des MySQL-Servers vergeben wurde.

Sollten schon zusätzliche Benutzer angelegt worden sein, dann können Sie hier natürlich auch einen alternativen Account angeben. Wichtig ist aber, dass dieser Account über Berechtigungen zum Anlegen von Datenbanken (Schemata) verfügt.

Nachdem der MySQL Administrator gestartet wurde, finden Sie im Menü den Punkt Backup. Wenn Sie diesen aktivieren, dann zeigt sich Ihnen eine Liste der auf dem Server befindlichen Datenbanken, in der aber noch kein Eintrag ausgewählt werden kann (siehe Bild 2). Erst muss nämlich ein Backup-Projekt mit der Schaltfläche Neues Projekt angelegt werden.

missing image file

Bild 2: Die Tabellen für ein Backup im MySQL-Administrator

Falls der Backup-Vorgang später öfters wiederholt werden soll, dann vergeben Sie im Feld Projektname außerdem einen aussagekräftigen Namen wie Südsturm_Backup und betätigen die Schaltfläche Projekt speichern. Er erscheint damit in der Liste der Backup-Projekte links und kann aus dieser immer wieder aufgerufen werden.

Die Liste der verfügbaren Schemata ist nun aktiv, Sie können daraus eine Datenbank auswählen und mit der Pfeil rechts-Schaltfläche zum Backup-Inhalt hinzufügen.

Standardmäßig werden dabei alle Tabellen der Datenbank für das Backup berücksichtigt. Ein Teil-Backup ist möglich, indem Sie einzelne Tabellen abwählen. Sollten später der Datenbank neue Tabellen hinzugefügt werden, dann müssen diese manuell in das Backup-Projekt integriert werden.

Einfacher ist es aber, Sie schalten auf den Reiter Erweiterte Einstellungen um und aktivieren die Checkbox Vollständiges Backup – neue Tabellen werden dann später automatisch berücksichtigt.

Das Backup stellen Sie anschließend mit Klick auf die Schaltfläche Backup jetzt durchführen fertig. Dabei werden Sie in einem Speichern-Dialog dazu aufgefordert, einen Dateinamen für das Skript anzugeben – etwa suedsturm_backup.sql. Das erfolgreich exportierte SQL-Skript enthält nichts weiter als eine Aneinanderreihung von DDL-Anweisungen, aus dem die Datenbank von Grund auf neu erstellt werden kann. Mit INSERT-Statements werden auch die Daten wiederhergestellt.

Bliebe noch zu erwähnen, dass dieses Backup auch automatisiert durchgeführt werden kann, wenn über den Registerreiter Zeitplanung entsprechende Angaben gemacht werden. Weitere Ausführungen zum Vorgehen dabei finden Sie in der Hilfe zum MySQL Administrator.

Backup wiederherstellen

Aus dem SQL-Skript können Sie sehr einfach eine Datenbank wiederherstellen, indem Sie den Menüpunkt Wiederherstellung im MySQL Administrator aktivieren. Sie wählen die SQL-Datei suedsturm_backup.sql über die Schaltfläche Datei öffnen aus und klicken anschließend auf Starten.

Eine Fortschrittsanzeige informiert dann über die Wiederherstellung beziehungsweise das Neuanlegen der Datenbank. Die übrigen Einstellungen auf der Registerseite sind selbsterklärend und bedürfen im Normalfall keiner Modifikation.

Machen Sie sich allerdings klar, dass mit dem Wiederherstellen-Vorgang eine möglicherweise existierende Datenbank gleichen Namens auf dem Server komplett gelöscht wird.

Differenzielle Backups mit ausgeklügelten Optionen, die etwa Microsoft SQL Server vorsieht, sind mit den Bordmitteln des MySQL Administrators nicht möglich. Solche Backup-Tools sind für MySQL nur gegen gutes Geld zu haben.

Hier wird deutlich, dass Backups sich hervorragend dazu eignen, um Datenbanken von einem Server zum anderen zu transferieren. Entwickeln Sie Ihre Datenbank etwa auf dem lokalen MySQL-Server und speichern Sie nach Abschluss der Entwicklung über ein Backup das Ganze auf einen USB-Stick.

Beim Kunden stellen Sie aus der SQL-Datei die komplette Datenbank wieder her und haben ihn damit mit Ihrem neuesten Werk beglückt. Selbstverständlich lässt sich das alternativ statt über USB-Stick oder einen anderen Datenträger auch direkt über eine VPN-Verbindung zum Kunden erledigen – Sie brauchen bei Anmeldung am MySQL Administrator lediglich die IP des Kundenservers unter Server Host einzutragen.

ODBC-Treiber installieren

Unser Ziel ist es ja, die Tabellen vom MySQL-Server auf gleiche Weise in ein Access-Frontend zu verknüpfen, wie dies auch mit einem MDB-Backend geschieht.

Microsoft liefert aber verständlicherweise keinen nativen (ISAM-)Treiber für MySQL-Datenbanken. Die Verbindung geht über ODBC vonstatten. ODBC ist eine standardisierte Zwischenkommunikationsschicht zwischen einem SQL-Server und einem SQL-Client.

Ein ODBC-Consumer (Access) hält dabei genauso das Protokoll ein wie der ODBC-Provider. Beim Provider handelt es sich um einen Treiber, der mittels eigenem API den Server über TCP/IP-Ports oder Named Pipes ansprechen kann.

Nur er kennt die genauen Statements, die der SQL-Server verlangt, und kann mit den zurückgelieferten Ergebnissen etwas anfangen.

Der ODBC-Treiber ist damit im Prinzip nichts anderes als ein übersetzer der standardisierten

ODBC-SQL-Syntax in die Sprache, die der jeweilige SQL-Server versteht, und umgekehrt.

Für MySQL ist ein ODBC-Treiber unter [1] verfügbar, der MySQL Driver 3.51. Vor einiger Zeit wurde er in MySQL Connector/ODBC umgetauft.

Es gibt alternativ noch eine Version 5.1, die erweiterte Unicode-Kompatibilität aufweist, welche Sie aber besser noch nicht verwenden sollten, weil sie aus dem Beta-Stadium noch kaum heraus ist und auch sonst keine Vorteile bietet.

Das Treiberpaket im MSI-Format installieren Sie per Doppelklick unter Administratorrechten auf dem Rechner. Optionen gibt es dabei nicht zu berücksichtigen.

Datenquelle (DSN) anlegen

Eigentlich können Sie nach Installation des Treibers sogleich eine Verknüpfung zu MySQL-Tabellen aus Access heraus ansteuern. Diese Verknüpfung und die notwendigen Einstellungen müssen Sie dann aber für jedes Frontend neu vornehmen, das auf die gleiche MySQL-Datenbank zugreift.

Sinnvoll ist daher der Zwischenschritt über eine ODBC-Datenquelle, welche die Verbindungsdaten persistent in einer Datei oder in der Registry festhält. In Zukunft muss dann nur noch diese gespeicherte Verbindung aufgerufen werden. Die Verwaltung dieser Verbindungen erfolgt auf Ihrem Rechner über die Systemsteuerung und den ODBC-Datenquellen-Administrator.

Unter Windows XP finden Sie diesen ODBC-Administrator über den Umweg Systemsteuerung|Verwaltung|Datenquellen (ODBC).

Drei Registerkarten sind nun für das Neuanlegen oder Verwalten einer Datenquelle von Belang: Benutzer-DSN, System-DSN, Datei-DSN (siehe Bild 3). DSN bedeutet Database System Name. Für welche Sie sich entscheiden, ist zunächst egal. Jede dieser Seiten zeigt die Schaltfläche Hinzufügen… und Konfigurieren…

missing image file

Bild 3: Der ODBC-Datenquellenadministrator von Windows

So eingerichtete Datenquellen unterscheiden sich lediglich im Ort, an dem sie abgespeichert werden. Während bei der Datei-DSN die Verbindungsdaten in einer Textdatei gespeichert werden, die somit mobil ist, exportieren Benutzer-DSN und System-DSN die Einstellungen in die Registry – einmal im Zweig HKEY-CURRENT_USER und im anderen Fall im Zweig HKEY_LOCAL_MACHINE, jeweils unter \Software\ODBC\ODBC.INI.

Der Knackpunkt: Dabei werden alle Daten inklusive des für die Verbindung notwendigen Passworts im Klartext abgespeichert. Wie mit diesem Problem umgegangen werden kann, folgt später bei der Beschreibung von DSNless Connections.

Erstellen wir nun eine ODBC-Verbindung zur Südsturm-Datenbank auf dem MySQL-Server. Wählen Sie dazu Benutzer-DSN und Hinzufügen… Sie werden dann zur Auswahl eines installierten ODBC-Treibers aufgefordert. Wählen Sie hier den MySQL ODBC 3.51 Driver aus (siehe Bild 4).

missing image file

Bild 4: Treiberauswahl beim Anlegen einer DSN-Datenquelle

Um fortzufahren, klicken Sie auf die etwas unglücklich bezeichnete Schaltfläche Fertigstellen – fertiggestellt wird hier nämlich noch nichts, sondern Sie gelangen damit zum treiberspezifischen Konfigurations-Dialog des MySQL Connectors (siehe Bild 5). Hier können Sie nun den Namen für die Datenquelle angeben (Data Source Name) und die gleichen Anmeldedaten festhalten, die Sie bereits vom Start der Anwendung MySQL Administrator kennen: Server, Benutzer (User) und Passwort. Nachdem diese Grunddaten eingegeben wurden, füllt sich automatisch auch das Kombinationsfeld Database mit den auf dem Server verfügbaren Datenbanknamen. Sie wählen hier natürlich suedsturm aus.

missing image file

Bild 5: Einstellungen des MySQL-Treibers (Connector) beim Anlegen einer DSN

Ein Klick auf OK würde diese Verbindung bereits speichern. Zuvor sollten aber dringend noch weitere Treibereinstellungen vorgenommen werden, die für das Zusammenspiel mit Access von Bedeutung sind. Wechseln Sie dazu zur Registerkarte Advanced und aktivieren Sie Optionen wie in Bild 6.

missing image file

Bild 6: Konfigurationsoptionen des ODBC-Treibers für eine MySQL-Verbindung

Erläuterungen zur Wirkungsweise dieser Optionen führen hier zu weit und tief in die Funktionen der Datenbank-Engine. Fest steht jedenfalls, dass ohne diese gesetzten Optionen die Fehlerrate und Verbindungsprobleme unter Access zunehmen.

Die einzelnen Flags stehen übrigens für Optionskonstanten, die sich später bei Zugriffen über VBA-Code auch setzen lassen. Eine Zusammenstellung dieser Konstanten finden Sie unter [3]. Die Konstellation der Abbildung ergibt übrigens eine zusammengesetzte Konstante mit dem Wert OPTION=43.

MySQL-Tabellen verknüpfen

Mit der DSN-Datenquelle im Gepäck kann es nun richtig losgehen. Wie bei Access-Backends starten Sie die Verknüpfung über das Menü Datei|Externe Daten|Tabellen verknüpfen…

Im Auswahldialog stellen Sie jedoch für Dateityp ODBC-Datenbanken() ein. Im sich dadurch öffnenden Dialog markieren Sie unter Computerdatenquelle die Datenverbindung Südsturm_MySQL. Abschließend erscheint noch ein Dialogfenster, in dem Sie alle Tabellen der Südsturm-Datenbank auswählen.

Die Option zum Speichern des Kennworts können Sie auch gleich aktivieren. Die verknüpften Tabellen repräsentieren sich im Datenbankfenster nun mit einem anderen Symbol als bei Access-Backends (siehe Bild 7).

missing image file

Bild 7: So sehen verknüpfte ODBC-Tabellen im Datenbankfenster aus.

Und im Prinzip wars das schon: Sie können nun auf gewohnte Weise Abfragen, Formulare und Berichte auf Basis der Tabellen erstellen und damit genau so arbeiten, als hätten Sie ein Access-Backend im Einsatz.

Zunächst wollen wir jedoch noch überprüfen, was Access und MySQL beim Verknüpfen aus den ursprünglichen Felddatentypen der suedsturm.mdb gemacht haben.

Dazu öffnen Sie die Tabellen im Entwurf und kontrollieren die einzelnen Felder. Sie werden feststellen, dass fast alle Datentypen identisch mit denen der Ursprungsdatenbank sind. Selbst die Indizes sind korrekt: Die ID-Felder (Primärschlüssel) werden als eindeutig indiziert ausgewiesen und Fremdschlüssel-IDs als indiziert mit Duplikaten.

Abweichend werden Sie allerdings bemerken, dass die Primärschlüssel nicht mehr auf Autowert stehen – logisch, denn das Inkrementieren dieser Felder übernimmt nun MySQL selbst. Das Migration Kit hat beim übertragen das Autowertfeld der Tabelle tblArtikel etwa so definiert:

'ArtikelID'' int(10) NOT NULL auto_increment

Zusätzlich fällt noch auf, dass das Währungsfeld Einzelpreis in Dezimal 19,4 gewandelt wurde. Das ist so in Ordnung und bedeutet eine fixe Dezimalzahl mit vier Stellen hinter dem Komma.

Wenn Sie das Feld später an ein Textfeld eines Formulars binden, wird allerdings zur Laufzeit das Währungssymbol fehlen. Das lässt sich aber leicht ändern: Tragen Sie im Tabellenentwurf im Eingabefeld Format einfach Währung oder Euro ein. Diese Feldeigenschaft bleibt erhalten, obwohl Sie Access beim öffnen der Tabelle im Entwurf warnte, dass verschiedene Eigenschaften nicht geändert werden könnten.

Das ist auch richtig, betrifft aber nur die Datentypen oder Attribute der Felder selbst. Eigenschaften der Felder beziehen sich jedoch auf die gespeicherte Verknüpfung und können geändert werden. Sie ändern nichts an den MySQL-Tabellen auf dem Server.

Die den Tabellen hinzugefügten TIMESTAMP-Spalten zeigen sich im Tabellenentwurf übrigens als Datumsfeld. Dass es sich dabei nicht wirklich um ein Datumsfeld handelt, erkennen Sie daran, dass das Feld gesperrt ist: öffnen Sie die Tabelle und versuchen Sie, ein Timestamp-Datum zu ändern oder einzugeben – es geht nicht. Access kann die Eingabe nicht in das binäre Timestamp-Format von MySQL zurückverwandeln.

Beziehungen anlegen

Es ist Geschmackssache, ob man im Beziehungsfenster von Access für ODBC-Tabellen Beziehungen anlegt. Denn diese Beziehungen haben keine wirkliche Auswirkung im Betrieb.

Schließlich ist es Access unmöglich, auf MySQL einzuwirken und dort Modifikationen am Datenmodell vorzunehmen. Warum also sollte man sich dann die Mühe machen, das Datenmodell hier abzubilden Zwei Gründe sprechen dafür: Einmal führt das AutoVerknüpfen-Feature von Access dazu, dass in Abfragen beim Hinzufügen von Tabellen gleich automatisch die JOIN-Linien angelegt werden, wenn eine Beziehung besteht, und zum anderen haben Sie im Beziehungsfenster des Frontends so immer einen überblick über die Abhängigkeiten der Tabellen, also über das Datenmodell.

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

Schreibe einen Kommentar