{"id":55000588,"date":"2008-04-01T00:00:00","date_gmt":"2021-02-11T21:20:29","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=588"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Von_Access_nach_MySQL_Teil_2","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/","title":{"rendered":"Von Access nach MySQL, Teil 2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>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&uuml;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&ouml;st werden k&ouml;nnen, das soll der folgende Beitrag erl&auml;utern.<\/b><\/p>\n<p>Sie m&uuml;ssen weder zwingend den ersten Teil dieser Serie verinnerlicht, noch das dort vorgestellte S&uuml;dsturm-Beispiel durchgespielt haben.<\/p>\n<p>Denn zu den diesen Beitrag begleitenden Dateien geh&ouml;rt auch ein SQL-Skript <b>Suedsturm_Backup.sql<\/b>, mit dem Sie die MySQL-Datenbank samt referenzieller Integrit&auml;t herstellen k&ouml;nnen.<\/p>\n<p>Weil dies ein Vorgang ist, den Sie auch sp&auml;ter immer mal wieder bei der Arbeit mit MySQL ben&ouml;tigen, sei das Sichern einer MySQL-Datenbank in einer einzigen Datei hier zun&auml;chst kurz aufgezeigt.<\/p>\n<p><b>Backup erstellen<\/b><\/p>\n<p>Starten Sie den <b>MySQL Administrator <\/b>aus der GUI-Suite von MySQL [2]. Sie werden mit einem Login-Dialog konfrontiert, in dem Sie die notwendigsten Anmeldedaten angeben (siehe Bild 1).<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild262_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Anmelden an MySQL Administrator f&uuml;r eine Verwaltungs-Session<\/span><\/b><\/p>\n<p>Interessant sind dabei nur die Felder <b>Server Host<\/b>, <b>Nutzername <\/b>und <b>Passwort<\/b>. F&uuml;r <b>Server Host <\/b>ist bei lokal installiertem MySQL-Server <b>localhost <\/b>anzugeben und ansonsten der Name des Servers oder dessen IP-Nummer.<\/p>\n<p>Als Benutzername verwenden wir zun&auml;chst den immer existierenden Benutzer <b>root<\/b>, dessen Passwort bereits beim Installieren des MySQL-Servers vergeben wurde.<\/p>\n<p>Sollten schon zus&auml;tzliche Benutzer angelegt worden sein, dann k&ouml;nnen Sie hier nat&uuml;rlich auch einen alternativen Account angeben. Wichtig ist aber, dass dieser Account &uuml;ber Berechtigungen zum Anlegen von Datenbanken (Schemata) verf&uuml;gt. <\/p>\n<p>Nachdem der <b>MySQL Administrator <\/b>gestartet wurde, finden Sie im Men&uuml; den Punkt <b>Backup<\/b>. Wenn Sie diesen aktivieren, dann zeigt sich Ihnen eine Liste der auf dem Server befindlichen Datenbanken, in der aber noch kein Eintrag ausgew&auml;hlt werden kann (siehe Bild 2). Erst muss n&auml;mlich ein Backup-Projekt mit der Schaltfl&auml;che <b>Neues Projekt <\/b>angelegt werden.<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild269_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die Tabellen f&uuml;r ein Backup im MySQL-Administrator<\/span><\/b><\/p>\n<p>Falls der Backup-Vorgang sp&auml;ter &ouml;fters wiederholt werden soll, dann vergeben Sie im Feld <b>Projektname <\/b>au&szlig;erdem einen aussagekr&auml;ftigen Namen wie <b>S&uuml;dsturm_Backup <\/b>und bet&auml;tigen die Schaltfl&auml;che <b>Projekt speichern<\/b>. Er erscheint damit in der Liste der Backup-Projekte links und kann aus dieser immer wieder aufgerufen werden.<\/p>\n<p>Die Liste der verf&uuml;gbaren Schemata ist nun aktiv, Sie k&ouml;nnen daraus eine Datenbank ausw&auml;hlen und mit der <b>Pfeil rechts<\/b>-Schaltfl&auml;che zum Backup-Inhalt hinzuf&uuml;gen.<\/p>\n<p>Standardm&auml;&szlig;ig werden dabei alle Tabellen der Datenbank f&uuml;r das Backup ber&uuml;cksichtigt. Ein Teil-Backup ist m&ouml;glich, indem Sie einzelne Tabellen abw&auml;hlen. Sollten sp&auml;ter der Datenbank neue Tabellen hinzugef&uuml;gt werden, dann m&uuml;ssen diese manuell in das Backup-Projekt integriert werden.<\/p>\n<p>Einfacher ist es aber, Sie schalten auf den Reiter <b>Erweiterte Einstellungen <\/b>um und aktivieren die Checkbox <b>Vollst&auml;ndiges Backup <\/b>&#8211; neue Tabellen werden dann sp&auml;ter automatisch ber&uuml;cksichtigt.<\/p>\n<p>Das Backup stellen Sie anschlie&szlig;end mit Klick auf die Schaltfl&auml;che <b>Backup jetzt durchf&uuml;hren <\/b>fertig. Dabei werden Sie in einem <b>Speichern<\/b>-Dialog dazu aufgefordert, einen Dateinamen f&uuml;r das Skript anzugeben &#8211; etwa <b>suedsturm_backup.sql<\/b>. Das erfolgreich exportierte SQL-Skript enth&auml;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.<\/p>\n<p>Bliebe noch zu erw&auml;hnen, dass dieses Backup auch automatisiert durchgef&uuml;hrt werden kann, wenn &uuml;ber den Registerreiter Zeitplanung entsprechende Angaben gemacht werden. Weitere Ausf&uuml;hrungen zum Vorgehen dabei finden Sie in der Hilfe zum <b>MySQL Administrator<\/b>.<\/p>\n<p><b>Backup wiederherstellen<\/b><\/p>\n<p>Aus dem SQL-Skript k&ouml;nnen Sie sehr einfach eine Datenbank wiederherstellen, indem Sie den Men&uuml;punkt <b>Wiederherstellung <\/b>im <b>MySQL Administrator <\/b>aktivieren. Sie w&auml;hlen die SQL-Datei <b>suedsturm_backup.sql <\/b>&uuml;ber die Schaltfl&auml;che <b>Datei &ouml;ffnen <\/b>aus und klicken anschlie&szlig;end auf <b>Starten<\/b>.<\/p>\n<p>Eine Fortschrittsanzeige informiert dann &uuml;ber die Wiederherstellung beziehungsweise das Neuanlegen der Datenbank. Die &uuml;brigen Einstellungen auf der Registerseite sind selbsterkl&auml;rend und bed&uuml;rfen im Normalfall keiner Modifikation.<\/p>\n<p>Machen Sie sich allerdings klar, dass mit dem Wiederherstellen-Vorgang eine m&ouml;glicherweise existierende Datenbank gleichen Namens auf dem Server komplett gel&ouml;scht wird.<\/p>\n<p>Differenzielle Backups mit ausgekl&uuml;gelten Optionen, die etwa <b>Microsoft SQL Server <\/b>vorsieht, sind mit den Bordmitteln des <b>MySQL Administrators <\/b>nicht m&ouml;glich. Solche Backup-Tools sind f&uuml;r MySQL nur gegen gutes Geld zu haben.<\/p>\n<p>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 &uuml;ber ein Backup das Ganze auf einen USB-Stick.<\/p>\n<p>Beim Kunden stellen Sie aus der SQL-Datei die komplette Datenbank wieder her und haben ihn damit mit Ihrem neuesten Werk begl&uuml;ckt. Selbstverst&auml;ndlich l&auml;sst sich das alternativ statt &uuml;ber USB-Stick oder einen anderen Datentr&auml;ger auch direkt &uuml;ber eine VPN-Verbindung zum Kunden erledigen &#8211; Sie brauchen bei Anmeldung am <b>MySQL Administrator <\/b>lediglich die IP des Kundenservers unter <b>Server Host <\/b>einzutragen.<\/p>\n<p><b>ODBC-Treiber installieren<\/b><\/p>\n<p>Unser Ziel ist es ja, die Tabellen vom MySQL-Server auf gleiche Weise in ein Access-Frontend zu verkn&uuml;pfen, wie dies auch mit einem MDB-Backend geschieht.<\/p>\n<p>Microsoft liefert aber verst&auml;ndlicherweise keinen nativen (ISAM-)Treiber f&uuml;r MySQL-Datenbanken. Die Verbindung geht &uuml;ber ODBC vonstatten. ODBC ist eine standardisierte Zwischenkommunikationsschicht zwischen einem SQL-Server und einem SQL-Client.<\/p>\n<p>Ein ODBC-Consumer (Access) h&auml;lt dabei genauso das Protokoll ein wie der ODBC-Provider. Beim Provider handelt es sich um einen Treiber, der mittels eigenem API den Server &uuml;ber TCP\/IP-Ports oder <b>Named Pipes <\/b>ansprechen kann.<\/p>\n<p>Nur er kennt die genauen Statements, die der SQL-Server verlangt, und kann mit den zur&uuml;ckgelieferten Ergebnissen etwas anfangen.<\/p>\n<p>Der ODBC-Treiber ist damit im Prinzip nichts anderes als ein &uuml;bersetzer der standardisierten <\/p>\n<pre>ODBC-SQL-Syntax in die Sprache, die der jeweilige SQL-Server versteht, und umgekehrt.<\/pre>\n<p>F&uuml;r MySQL ist ein ODBC-Treiber unter [1] verf&uuml;gbar, der <b>MySQL Driver 3.51<\/b>. Vor einiger Zeit wurde er in <b>MySQL Connector\/ODBC <\/b>umgetauft.<\/p>\n<p>Es gibt alternativ noch eine Version 5.1, die erweiterte Unicode-Kompatibilit&auml;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.<\/p>\n<p>Das Treiberpaket im MSI-Format installieren Sie per Doppelklick unter Administratorrechten auf dem Rechner. Optionen gibt es dabei nicht zu ber&uuml;cksichtigen.<\/p>\n<p><b>Datenquelle (DSN) anlegen<\/b><\/p>\n<p>Eigentlich k&ouml;nnen Sie nach Installation des Treibers sogleich eine Verkn&uuml;pfung zu MySQL-Tabellen aus Access heraus ansteuern. Diese Verkn&uuml;pfung und die notwendigen Einstellungen m&uuml;ssen Sie dann aber f&uuml;r jedes Frontend neu vornehmen, das auf die gleiche MySQL-Datenbank zugreift. <\/p>\n<p>Sinnvoll ist daher der Zwischenschritt &uuml;ber eine ODBC-Datenquelle, welche die Verbindungsdaten persistent in einer Datei oder in der Registry festh&auml;lt. In Zukunft muss dann nur noch diese gespeicherte Verbindung aufgerufen werden. Die Verwaltung dieser Verbindungen erfolgt auf Ihrem Rechner &uuml;ber die Systemsteuerung und den ODBC-Datenquellen-Administrator. <\/p>\n<p>Unter Windows XP finden Sie diesen ODBC-Administrator &uuml;ber den Umweg <b>Systemsteuerung|Verwaltung|Datenquellen (ODBC)<\/b>.<\/p>\n<p>Drei Registerkarten sind nun f&uuml;r das Neuanlegen oder Verwalten einer Datenquelle von Belang: <b>Benutzer-DSN<\/b>, <b>System-DSN<\/b>, <b>Datei-DSN<\/b> (siehe Bild 3). <b>DSN <\/b>bedeutet <b>Database System Name<\/b>. F&uuml;r welche Sie sich entscheiden, ist zun&auml;chst egal. Jede dieser Seiten zeigt die Schaltfl&auml;che <b>Hinzuf&uuml;gen&#8230; <\/b>und <b>Konfigurieren&#8230;<\/b><\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild275_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Der ODBC-Datenquellenadministrator von Windows<\/span><\/b><\/p>\n<p>So eingerichtete Datenquellen unterscheiden sich lediglich im Ort, an dem sie abgespeichert werden. W&auml;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 &#8211; einmal im Zweig <b>HKEY-CURRENT_USER <\/b>und im anderen Fall im Zweig <b>HKEY_LOCAL_MACHINE<\/b>, jeweils unter <b>\\Software\\ODBC\\ODBC.INI<\/b>.<\/p>\n<p>Der Knackpunkt: Dabei werden alle Daten inklusive des f&uuml;r die Verbindung notwendigen Passworts im Klartext abgespeichert. Wie mit diesem Problem umgegangen werden kann, folgt sp&auml;ter bei der Beschreibung von DSNless Connections.<\/p>\n<p>Erstellen wir nun eine ODBC-Verbindung zur S&uuml;dsturm-Datenbank auf dem MySQL-Server. W&auml;hlen Sie dazu Benutzer-DSN und <b>Hinzuf&uuml;gen&#8230; <\/b>Sie werden dann zur Auswahl eines installierten ODBC-Treibers aufgefordert. W&auml;hlen Sie hier den <b>MySQL ODBC 3.51 Driver <\/b>aus (siehe Bild 4).<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild287_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Treiberauswahl beim Anlegen einer DSN-Datenquelle<\/span><\/b><\/p>\n<p>Um fortzufahren, klicken Sie auf die etwas ungl&uuml;cklich bezeichnete Schaltfl&auml;che <b>Fertigstellen <\/b>&#8211; fertiggestellt wird hier n&auml;mlich noch nichts, sondern Sie gelangen damit zum treiberspezifischen Konfigurations-Dialog des <b>MySQL Connectors <\/b>(siehe Bild 5). Hier k&ouml;nnen Sie nun den Namen f&uuml;r die Datenquelle angeben (<b>Data Source Name<\/b>) und die gleichen Anmeldedaten festhalten, die Sie bereits vom Start der Anwendung <b>MySQL Administrator <\/b>kennen: Server, Benutzer (User) und Passwort. Nachdem diese Grunddaten eingegeben wurden, f&uuml;llt sich automatisch auch das Kombinationsfeld <b>Database <\/b>mit den auf dem Server verf&uuml;gbaren Datenbanknamen. Sie w&auml;hlen hier nat&uuml;rlich <b>suedsturm <\/b>aus.<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild281_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Einstellungen des MySQL-Treibers (Connector) beim Anlegen einer DSN<\/span><\/b><\/p>\n<p>Ein Klick auf <b>OK <\/b>w&uuml;rde diese Verbindung bereits speichern. Zuvor sollten aber dringend noch weitere Treibereinstellungen vorgenommen werden, die f&uuml;r das Zusammenspiel mit Access von Bedeutung sind. Wechseln Sie dazu zur Registerkarte <b>Advanced <\/b>und aktivieren Sie Optionen wie in Bild 6.<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild293_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Konfigurationsoptionen des ODBC-Treibers f&uuml;r eine MySQL-Verbindung <\/span><\/b><\/p>\n<p>Erl&auml;uterungen zur Wirkungsweise dieser Optionen f&uuml;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. <\/p>\n<p>Die einzelnen Flags stehen &uuml;brigens f&uuml;r Optionskonstanten, die sich sp&auml;ter bei Zugriffen &uuml;ber VBA-Code auch setzen lassen. Eine Zusammenstellung dieser Konstanten finden Sie unter [3]. Die Konstellation der Abbildung ergibt &uuml;brigens eine zusammengesetzte Konstante mit dem Wert <b>OPTION=43<\/b>.<\/p>\n<p><b>MySQL-Tabellen verkn&uuml;pfen<\/b><\/p>\n<p>Mit der DSN-Datenquelle im Gep&auml;ck kann es nun richtig losgehen. Wie bei Access-Backends starten Sie die Verkn&uuml;pfung &uuml;ber das Men&uuml; <b>Datei|Externe Daten|Tabellen verkn&uuml;pfen&#8230;<\/b><\/p>\n<p><!--30percent--><\/p>\n<p>Im Auswahldialog stellen Sie jedoch f&uuml;r Dateityp <b>ODBC-Datenbanken() <\/b>ein. Im sich dadurch &ouml;ffnenden Dialog markieren Sie unter <b>Computerdatenquelle <\/b>die Datenverbindung <b>S&uuml;dsturm_MySQL<\/b>.<b> <\/b>Abschlie&szlig;end erscheint noch ein Dialogfenster, in dem Sie alle Tabellen der S&uuml;dsturm-Datenbank ausw&auml;hlen.<\/p>\n<p>Die Option zum Speichern des Kennworts k&ouml;nnen Sie auch gleich aktivieren. Die verkn&uuml;pften Tabellen repr&auml;sentieren sich im Datenbankfenster nun mit einem anderen Symbol als bei Access-Backends (siehe Bild 7).<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild299_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: So sehen verkn&uuml;pfte ODBC-Tabellen im Datenbankfenster aus.<\/span><\/b><\/p>\n<p>Und im Prinzip wars das schon: Sie k&ouml;nnen nun auf gewohnte Weise Abfragen, Formulare und Berichte auf Basis der Tabellen erstellen und damit genau so arbeiten, als h&auml;tten Sie ein Access-Backend im Einsatz.<\/p>\n<p>Zun&auml;chst wollen wir jedoch noch &uuml;berpr&uuml;fen, was Access und MySQL beim Verkn&uuml;pfen aus den urspr&uuml;nglichen Felddatentypen der <b>suedsturm.mdb <\/b>gemacht haben.<\/p>\n<p>Dazu &ouml;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&auml;rschl&uuml;ssel) werden als eindeutig indiziert ausgewiesen und Fremdschl&uuml;ssel-IDs als indiziert mit Duplikaten.<\/p>\n<p>Abweichend werden Sie allerdings bemerken, dass die Prim&auml;rschl&uuml;ssel nicht mehr auf Autowert stehen &#8211; logisch, denn das Inkrementieren dieser Felder &uuml;bernimmt nun MySQL selbst. Das <b>Migration Kit <\/b>hat beim &uuml;bertragen das Autowertfeld der Tabelle <b>tblArtikel <\/b>etwa so definiert:<\/p>\n<pre>'ArtikelID'' int(10) NOT NULL auto_increment<\/pre>\n<p>Zus&auml;tzlich f&auml;llt noch auf, dass das W&auml;hrungsfeld Einzelpreis in <b>Dezimal 19,4 <\/b>gewandelt wurde. Das ist so in Ordnung und bedeutet eine fixe Dezimalzahl mit vier Stellen hinter dem Komma.<\/p>\n<p>Wenn Sie das Feld sp&auml;ter an ein Textfeld eines Formulars binden, wird allerdings zur Laufzeit das W&auml;hrungssymbol fehlen. Das l&auml;sst sich aber leicht &auml;ndern: Tragen Sie im Tabellenentwurf im Eingabefeld <b>Format <\/b>einfach <b>W&auml;hrung <\/b>oder <b>Euro <\/b>ein. Diese Feldeigenschaft bleibt erhalten, obwohl Sie Access beim &ouml;ffnen der Tabelle im Entwurf warnte, dass verschiedene Eigenschaften nicht ge&auml;ndert werden k&ouml;nnten.<\/p>\n<p>Das ist auch richtig, betrifft aber nur die Datentypen oder Attribute der Felder selbst. Eigenschaften der Felder beziehen sich jedoch auf die gespeicherte Verkn&uuml;pfung und k&ouml;nnen ge&auml;ndert werden. Sie &auml;ndern nichts an den MySQL-Tabellen auf dem Server. <\/p>\n<p>Die den Tabellen hinzugef&uuml;gten <b>TIMESTAMP<\/b>-Spalten zeigen sich im Tabellenentwurf &uuml;brigens als Datumsfeld. Dass es sich dabei nicht wirklich um ein Datumsfeld handelt, erkennen Sie daran, dass das Feld gesperrt ist: &ouml;ffnen Sie die Tabelle und versuchen Sie, ein Timestamp-Datum zu &auml;ndern oder einzugeben &#8211; es geht nicht. Access kann die Eingabe nicht in das bin&auml;re Timestamp-Format von MySQL zur&uuml;ckverwandeln.<\/p>\n<p><b>Beziehungen anlegen<\/b><\/p>\n<p>Es ist Geschmackssache, ob man im Beziehungsfenster von Access f&uuml;r ODBC-Tabellen Beziehungen anlegt. Denn diese Beziehungen haben keine wirkliche Auswirkung im Betrieb.<\/p>\n<p>Schlie&szlig;lich ist es Access unm&ouml;glich, auf MySQL einzuwirken und dort Modifikationen am Datenmodell vorzunehmen. Warum also sollte man sich dann die M&uuml;he machen, das Datenmodell hier abzubilden Zwei Gr&uuml;nde sprechen daf&uuml;r: Einmal f&uuml;hrt das <b>AutoVerkn&uuml;pfen<\/b>-Feature von Access dazu, dass in Abfragen beim Hinzuf&uuml;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 &uuml;berblick &uuml;ber die Abh&auml;ngigkeiten der Tabellen, also &uuml;ber das Datenmodell.<\/p>\n<p>Sie k&ouml;nnen also wie gewohnt Tabellen in das Beziehungsfenster von Access einf&uuml;gen und Felder &uuml;bereinanderziehen, um Beziehungen herzustellen.<\/p>\n<p>Nicht m&ouml;glich ist es aber, f&uuml;r diese Beziehungen referenzielle Integrit&auml;t einzustellen und etwa L&ouml;schweitergaben zu bestimmen. Die zugeh&ouml;rigen Steuerelemente sind im entsprechenden Dialogfenster deaktiviert.<\/p>\n<p>Um referenzielle Integrit&auml;t k&uuml;mmert sich MySQL selbst, weil es seit der Version 5 des Servers auch Fremdschl&uuml;ssel mit Aktualisierungs- und L&ouml;schweitergabe vorsieht.<\/p>\n<p><b>Formulare erstellen<\/b><\/p>\n<p>Auf Basis der verkn&uuml;pften ODBC-Tabellen k&ouml;nnen nun Formulare erstellt werden. In der Beispieldatenbank <b>Suedsturm_mysql.mdb <\/b>finden Sie bereits zwei Formulare, die erst fehlerfrei funktionieren, nachdem Sie alle Tabellen neu verkn&uuml;pft haben.<\/p>\n<p>Dazu m&uuml;ssen erst alle vorhandenen Tabellen gel&ouml;scht werden, weil sie auf eine DSN-Quelle verweisen, die auf Ihrem Rechner nicht existiert. &uuml;ber eine L&ouml;sung zum Neuverkn&uuml;pfen von ODBC-Tabellen per VBA erfahren Sie sp&auml;ter mehr.<\/p>\n<p><b>Formular Artikelkategorien<\/b><\/p>\n<p>Rufen Sie das Formular <b>frmKategorien <\/b>auf, das zum Bearbeiten von Kategorien f&uuml;r S&uuml;dsturm-Artikel dient. &#8222;Prima!&#8220;, werden Sie sagen, &#8222;aber wo sind die Abbildungen geblieben, die in dieser Tabelle urspr&uuml;nglich zu jeder Kategorie enthalten waren&#8220; Ganz einfach: Sie sind weg! Hier haben wir es mit einer der wenigen Unzul&auml;nglichkeiten des <b>Migration Toolkits <\/b>zu tun.<\/p>\n<p>Es exportiert OLE-Felder zwar korrekt in den MySQL-Feldtyp <b>LONGBLOB<\/b>, den Access nach Verkn&uuml;pfen der Tabelle wiederum als OLE-Feld ausweist. Der Inhalt der Datens&auml;tze wird aber offenbar nicht &uuml;bertragen.<\/p>\n<p>Wie bekommt man den Inhalt nachtr&auml;glich in die MySQL-Tabellen, wie kann man hier nacharbeiten Die L&ouml;sung ist denkbar einfach: Die OLE-Feldinhalte werden mit einer Anf&uuml;geabfrage aus dem urspr&uuml;nglichen Access-Backend exportiert.<\/p>\n<p>Dazu &ouml;ffnen Sie die Quelldatenbank <b>suedsturm.mdb <\/b>und erstellen zun&auml;chst &uuml;ber die DSN-Datenquelle eine neue ODBC-Verkn&uuml;pfung zur Tabelle <b>tblKategorien<\/b>. Da diese Tabelle bereits existiert, wird sie als <b>tblKategorien1 <\/b>verkn&uuml;pft.<\/p>\n<p>L&ouml;schen Sie dann alle Datens&auml;tze in ihr entweder in der Datenblattansicht oder mit der SQL-Anweisung <b>DELETE FROM tblKategorien1<\/b>.<\/p>\n<p>Anschlie&szlig;end ben&ouml;tigen Sie eine Anf&uuml;geabfrage, die den Inhalt des OLE-Felds von der einen in die andere Tabelle &uuml;bertr&auml;gt:<\/p>\n<pre>INSERT INTO tblkategorien1 SELECT tblKategorien.* FROM tblKategorien;<\/pre>\n<p>Und tats&auml;chlich ist nun alles so, wie es sein sollte, und das Formular <b>frmKategorien <\/b>zeigt die Abbildungen nun im gebundenen OLE-Steuerelement an (siehe Bild 8).<\/p>\n<p> <img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2008_02\/MySQLII-web-images\/Bild305_opt.jpeg\" alt=\"missing image file\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Kategorienformular der Beispieldatenbank mit OLE-Bild aus MySQL-BLOB<\/span><\/b><\/p>\n<p>Wenn Sie keine Lust haben, diese Schritte hier manuell nachzuvollziehen, dann k&ouml;nnen Sie &uuml;brigens die MySQL-Datenbank auch mit dem Backup <b>Suedsturm_backup2.sql <\/b>wiederherstellen, wie eingangs beschrieben.<\/p>\n<p>Das enth&auml;lt die OLE-Daten bereits. In Notepad ge&ouml;ffnet werden Sie feststellen, dass dabei die bin&auml;ren Daten des Feldes <b>Abbildung <\/b>in Form von Hexadezimal-Strings gespeichert sind.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Formular Kunden<\/p>\n<p>Das zweite Formular in der Beispieldatenbank hei&szlig;t <b>frmKunden <\/b>und zeigt die S&uuml;dsturm-Kunden inklusive ihrer Bestellungen in einem Unterformular. Auf den ersten Blick scheint hier alles zu klappen. Versuchen Sie aber einmal, s&auml;mtliche <b>PersonalID<\/b>-Eintr&auml;ge der Bestellungen im Unterformular zu &auml;ndern.<\/p>\n<p>Fr&uuml;her oder sp&auml;ter wird es zu einer Fehlermeldung kommen und der Datensatz nicht aktualisiert. Die Nummer des Fehlers ist 7776 und die Meldung lautet: &#8222;Reservierter Fehler. Es gibt keine Beschreibung f&uuml;r diesen Fehler.&#8220;<\/p>\n<p>Suspekt dabei ist, dass auch die <b>Errors<\/b>-Auflistung der <b>DBEngine<\/b>, die normale Fehler des ODBC-Treibers protokolliert &#8211; Ausf&uuml;hrungen dazu folgen &#8211; keine weiteren Angaben liefert. <\/p>\n<p>Der Grund f&uuml;r den Fehler zeigt sehr sch&ouml;n die Notwendigkeit von <b>TIMESTAMP<\/b>-Feldern in MySQL-Tabellen, wenn sie nach Access verkn&uuml;pft werden und keine Probleme beim Aktualisieren oder L&ouml;schen von Datens&auml;tzen auftreten sollen.<\/p>\n<p>Im ersten Teil dieser MySQL-Serie hatten wir zwar nach dem Migrationsprozess manuell Timestamp-Felder in die Tabellen aufgenommen und sie mit dem Vorgabewert <b>CURRENT_TIMESTAMP <\/b>ausgestattet.<\/p>\n<p>Das hat aber noch nicht dazu gef&uuml;hrt, dass diese Felder auch tats&auml;chlich mit Timestamp-Werten gef&uuml;llt wurden &#8211; sie sind leer und haben den Wert <b>Null<\/b>. Damit kann Access nichts anfangen. Die Timestamp-Felder m&uuml;ssen nachtr&auml;glich &uuml;ber eine Aktualisierungsabfrage mit Werten versehen werden.<\/p>\n<p>Sowenig sie aber Timestamps in der Datenblattansicht der Tabelle &auml;ndern k&ouml;nnen, sowenig geht das &uuml;ber eine Abfrage &#8211; Sie erhalten die Meldung <b>Feld nicht aktualisierbar<\/b>.<\/p>\n<p>Es gibt nun zwei Wege, um die Abfrage dennoch auszuf&uuml;hren: Entweder Sie benutzen den Query Browser aus der GUI-Suite von MySQL [2] oder Sie f&uuml;hren eine <b>Pass-Through<\/b>-Abfrage aus, die direkt auf den MySQL-Server zugreift.<\/p>\n<p><b>Pass-Through-Abfrage erstellen<\/b><\/p>\n<p>Sie &ouml;ffnen dazu eine neue Abfrage, f&uuml;gen aber keine Tabelle hinzu. Wechseln Sie den Abfragetyp &uuml;ber das Men&uuml; <b>Abfrage|SQL-spezifisch|Pass-Through<\/b>.<\/p>\n<p>Nun k&ouml;nnen Sie ausschlie&szlig;lich SQL-Anweisungen im Editor eingeben, daf&uuml;r aber in der Syntax des MySQL-Servers, die einen erheblich gr&ouml;&szlig;eren Umfang hat als der JET-Dialekt. VBA-Funktionen oder Bez&uuml;ge zu Formularfeldern sind in den SQL-Anweisungen nicht m&ouml;glich. Als Anweisung zum Setzen der Timestamp-Felder schreiben Sie etwa:<\/p>\n<pre>UPDATE tblBestellungen SET TS=20080101000000;<\/pre>\n<p>Jedes Timestamp-Feld <b>TS <\/b>wird hier mit einem dem Datum <b>01.01.2008 <\/b>analogen Wert gef&uuml;llt. Wenn Sie die Abfrage nun ausf&uuml;hren, dann wird der Dialog zur Auswahl einer DSN erscheinen.<\/p>\n<p>Access wei&szlig; zwar durch den Abfragetyp nun, dass Sie eine ODBC-Abfrage ausf&uuml;hren m&ouml;chten, nicht jedoch, zu welchem Server es sich verbinden soll. Nach Auswahl der DSN <b>S&uuml;dsturm_MYSQL <\/b>ist dann die Timestamp-Spalte gef&uuml;llt.<\/p>\n<p>Access meldet: <b>Die Abfrage hat keine Datens&auml;tze zur&uuml;ckgegeben<\/b>. Diese Meldung scheint &uuml;berfl&uuml;ssig, weil wir ja keine Auswahlabfrage ausf&uuml;hren.<\/p>\n<p>Access kann das aber nicht ahnen, weil es die SQL-Anweisung selbst nicht analysiert oder interpretiert. Der SQL-String geht unbesehen direkt an den Server &#8211; daher die Bezeichnung <b>Pass-Through<\/b>. <\/p>\n<p>Damit Sie diese Meldung nicht mehr zu Gesicht bekommen und au&szlig;erdem das &ouml;ffnen des Dialogs f&uuml;r ODBC-Datenquellen vermeiden, k&ouml;nnen Sie die Eigenschaften der Abfrage modifizieren.<\/p>\n<p>Zeigen Sie diese &uuml;ber das Men&uuml; <b>Ansicht|Eigenschaften <\/b>an. F&uuml;r <b>Liefert Datens&auml;tze <\/b>geben Sie <b>Nein <\/b>an und f&uuml;r die ODBC-Verbindung klicken Sie die Schaltfl&auml;che mit den P&uuml;nktchen an und w&auml;hlen nun die DSN aus. Der ODBC-Connection-String ist jetzt als Eigenschaft der Abfrage gespeichert.<\/p>\n<p>Wiederholen Sie die <b>Pass-Through<\/b>-Abfrage f&uuml;r jede Tabelle der S&uuml;dsturm-Datenbank. Sie werden danach feststellen, dass das Unterformular <b>sfrmBestellungen <\/b>keine Fehler mehr erzeugt und die Datens&auml;tze ordnungsgem&auml;&szlig; aktualisiert. Der Inhalt der Timestamp-Felder ist f&uuml;r die JET-Engine notwendig, um R&uuml;ckmeldungen zum Status der Datens&auml;tze zu erhalten.<\/p>\n<p><b>Fehler ermitteln<\/b><\/p>\n<p>Wenn sich in VBA ein Fehler ereignet, so k&ouml;nnen Sie dessen Nummer und Beschreibung einfach aus dem <b>Err<\/b>-Objekt auslesen. Dabei spielt es keine Rolle, welches die Quelle des Fehlers war: Sowohl VBA-Fehler wie auch Fehler der JET-Engine werden im <b>Err<\/b>-Objekt festgehalten.<\/p>\n<p>Meldet jedoch ein SQL-Server &uuml;ber ODBC einen Fehler, dann wird die Sache komplizierter. Da die JET-Engine auch hier nicht unbeteiligt ist, l&ouml;st sie einen Fehler aus, der im <b>Err<\/b>-Objekt gesetzt wird.<\/p>\n<p>Zus&auml;tzlich f&uuml;llt sich aber auch die <b>Errors<\/b>-Auflistung des <b>DBEngine<\/b>-Objekts. Auflistung bedeutet, dass sich bei einem Datenvorgang gleich mehrere Fehler ereignet haben k&ouml;nnen, die chronologisch in einzelnen <b>DAO.Error<\/b>-Objekten protokolliert werden.<\/p>\n<p>Denn je nachdem, welche Folgen eine Operation auf dem Server hat, kann ein ausl&ouml;sender Fehler weitere nach sich ziehen. In den meisten F&auml;llen wird der ODBC-Treiber allerdings nur einen Fehler melden.<\/p>\n<p>Eine Fehlerbehandlung muss nun beide Fehlerarten ber&uuml;cksichtigen. Das zum Hauptformular <b>frmKunden <\/b>geh&ouml;rende Unterformular <b>sfrmBestellungen <\/b>enth&auml;lt exemplarisch eine solche Fehlerhandlung im Ereignis <b>Bei Fehler <\/b>(<b>Form_Error<\/b>):<\/p>\n<pre>Private Sub Form_Error(DataErr As Integer, _\r\n    Response As Integer)\r\n    Select Case DataErr<\/pre>\n<pre>    Case Else<\/pre>\n<pre>    DBEngine.Errors.Refresh<\/pre>\n<pre>    If DBEngine.Errors.Count &gt; 0 Then<\/pre>\n<pre>        Dim oErr As DAO.Error<\/pre>\n<pre>        Dim sError As String<\/pre>\n<pre>        For Each oErr In DBEngine.Errors<\/pre>\n<pre>            sError = oErr.Source &amp; &quot;\/&quot; _<\/pre>\n<pre>            &amp; oErr.Description &amp; vbCrLf<\/pre>\n<pre>        Next oErr<\/pre>\n<pre>        MsgBox sError, vbExclamation, _<\/pre>\n<pre>        &quot;MySQL-Datenbankfehler&quot;<\/pre>\n<pre>    End If<\/pre>\n<pre>    Response = acDataErrDisplay<\/pre>\n<pre>    Me.Undo<\/pre>\n<pre>    End Select<\/pre>\n<pre>    End Sub<\/pre>\n<p>Es wird zun&auml;chst im <b>Select Case<\/b>-Statement die vom Ereignis zur&uuml;ckgegebene Fehlernummer ausgewertet, damit auf jeden Fehler mit einer aussagekr&auml;ftigen Meldung reagiert werden kann. Implementiert ist das indessen in dieser einfachen Routine nicht &#8211; alle Fehler laufen auf den <b>Case Else<\/b>-Zweig.<\/p>\n<p>Dann wird ermittelt, ob die <b>Errors<\/b>-Auflistung der <b>DBEngine <\/b>Fehler protokolliert hat. Falls ja, dann werden alle in einer Schleife zu einem Meldungstext zusammengesetzt, der anschlie&szlig;end &uuml;ber eine Messagebox angezeigt wird. Das Setzen des R&uuml;ckgabeparameters <b>Response <\/b>auf <b>acDataErrDisplay <\/b>f&uuml;hrt dazu, dass nach dem Verlassen der Prozedur zus&auml;tzlich auch die normale Fehlermeldung der JET-Engine angezeigt wird, wie sie auch ohne diese Ereignisprozedur auftritt.<\/p>\n<p>Sie sollten &uuml;brigens in einer solchen Fehlerbehandlung immer zuerst die <b>Errors<\/b>-Auflistung mit der Anweisung <b>Refresh <\/b>aktualisieren. Es kommt n&auml;mlich hin und wieder vor, dass der Inhalt der <b>Errors<\/b>-Auflistung nicht synchron zur ausl&ouml;senden Meldung des ODBC-Treibers ist.<\/p>\n<p>Ausprobieren k&ouml;nnen Sie das, indem Sie absichtlich einen Fehler provozieren, was gar nicht ganz einfach ist. &#8222;ndern Sie etwa im <b>MySQL Administrator <\/b>das Feld <b>VersandUeber<\/b>, indem Sie dessen Eigenschaft <b>Not Null <\/b>aktivieren. Es darf dann nicht mehr leer sein. Im Unterformular <b>Bestellungen <\/b>versuchen Sie nun, in einem Datensatz den Eintrag f&uuml;r die Versandfirma zu l&ouml;schen. MySQL wird zur&uuml;ckmelden, dass dies Schl&uuml;sselverletzungen nach sich z&ouml;ge, und f&uuml;hrt den Vorgang nicht aus.<\/p>\n<p>Der ODBC-Treiber gibt dabei einen detaillierten Hinweis dar&uuml;ber aus, was schiefgegangen ist. In unserem Beispiel w&auml;re das die Regelverletzung <b>a foreign key contraints fails<\/b>, die besagt, dass eine Fremdschl&uuml;sselverletzung auftrat, weil das L&ouml;schen der Versandfirma dem Setzen des Felds auf Null gleichk&auml;me, was nicht erlaubt ist, weil eine Beziehung zu einem Datensatz der Tabelle <b>tblVersandfirmen <\/b>bestehen muss. Au&szlig;erdem wird die Regel, gegen die versto&szlig;en wurde, als SQL-Statement ausgegeben:<\/p>\n<pre>(nsuedsturm\/tblbestellungen'', CONSTRAINT 'tblVersandfirmentblBestellungen'' FOREIGN KEY ('VersandUeber'') REFERENCES 'tblversandfirmen'' ('FirmaID'') ON UPDATE CASCADE) (#1452)<\/pre>\n<p>Angeh&auml;ngt ist die Fehlernummer des MySQL-Servers. Sie k&ouml;nnen die Bedeutung solcher Nummern im Manual von MySQL nachschlagen oder online unter [4].<\/p>\n<p><b>Tabellen per VBA neu verkn&uuml;pfen (DSNless Connection)<\/b><\/p>\n<p>Das gleiche Problem, das Sie mit Access-Backends haben, gibt es auch mit ODBC-Backends: Ihr Ort kann sich &auml;ndern und die Verkn&uuml;pfungsangaben im Frontend sind nicht mehr korrekt. Selbstverst&auml;ndlich k&ouml;nnte man nun die Tabellen alle l&ouml;schen und manuell neu verkn&uuml;pfen. Das werden Sie wahrscheinlich dem Benutzer Ihrer Datenbank nicht zumuten wollen. Hier muss eine VBA-Routine her, welche die Verbindungsinformationen auffrischt.<\/p>\n<p>Ein Nebeneffekt der im Folgenden vorgestellten Prozedur: Sie macht das Anlegen einer DSN-Datenquelle auf dem Zielrechner &uuml;berfl&uuml;ssig und verkn&uuml;pft die Tabellen <b>DSNless<\/b>. Die komplette Routine mit dem umfangreichen Hilfsmodul <b>mdlODBCTool <\/b>finden Sie in der Beispieldatenbank <b>suedsturm_mysql.mdb<\/b>. Hier kann aus Platzgr&uuml;nden nur der Kern der Neuverkn&uuml;pfungsroutine dargestellt werden. Die wichtigste Information beim Neuverkn&uuml;pfen ist der ODBC-Connection-String. Den liefert normal die gespeicherte DSN; er kann aber genauso gut in VBA zusammengesetzt werden. Er sieht etwa so aus:<\/p>\n<pre>ODBC;Driver={MySQL ODBC 3.51 Driver};DATABASE=suedsturm; _\r\nSERVER=192.168.1.1;PORT=3306;UID=root;PWD=meinpasswort;OPTION=43;<\/pre>\n<p>Von den semikola-separierten Parametern ist eigentlich nur der f&uuml;r den Server variabel. Die anderen Parameter bleiben f&uuml;r eine Datenbank ohne spezielles Benutzersystem gleich. Dementsprechend kann man eine kleine Funktion basteln, die den Connection-String zur&uuml;ckgibt:<\/p>\n<pre>Function GetODBCString() As String<\/pre>\n<pre>    Dim strServer As String<\/pre>\n<pre>    strServer = InputBox(&quot;Bitte Server &quot; _\r\n    &amp; &quot;namentlich oder per IP angeben:&quot;, _<\/pre>\n<pre>    &quot;Verbindung zum Server&quot;, &quot;localhost&quot;)<\/pre>\n<pre>    If Len(strServer) = 0 Then Exit Function<\/pre>\n<pre>    GetODBCString = _\r\n    &quot;ODBC;Driver={MySQL ODBC 3.51 Driver}&quot; _<\/pre>\n<pre>    &amp; &quot;;DATABASE=suedsturm;SERVER=&quot; _\r\n    &amp; strServer &amp; &quot;;PORT=3306&quot; _<\/pre>\n<pre>    &amp; &quot;;UID=root;PWD=adminpasswort;&quot;_\r\n    &amp; &quot;OPTION=43;&quot;<\/pre>\n<pre>End Function<\/pre>\n<p>Auf Basis dieses Connection-Strings k&ouml;nnen nun die Verbindungsinformationen aller Tabellen aufgefrischt werden (ersetzen Sie in der Beispieldatenbank das Passwort <b>adminpasswort <\/b>durch Ihr eigenes). Hier ein Ausschnitt aus der Routine:<\/p>\n<pre>sBase = GetODBCString(False)\r\nFor Each tdf In dbs.TableDefs<\/pre>\n<pre>    If Left(tdf.Connect, 4) = &quot;ODBC&quot; Then<\/pre>\n<pre>        sConx = sBase &amp; &quot;TABLE=&quot; &amp; tdf.Name &amp; &quot;;&quot;<\/pre>\n<pre>        If (tdf.Connect &lt;&gt; sBase) Then<\/pre>\n<pre>            tdf.Connect = sBase<\/pre>\n<pre>            tdf.RefreshLink<\/pre>\n<pre>        End If<\/pre>\n<pre>    End If<\/pre>\n<pre>Next tdf<\/pre>\n<p>In der Routine werden alle <b>TableDef<\/b>-Objekte der Datenbank durchlaufen und es wird zun&auml;chst &uuml;berpr&uuml;ft, ob es sich um ODBC-Tabellen handelt, was am Pr&auml;fix <b>ODBC <\/b>f&uuml;r die <b>Connect<\/b>-Eigenschaft ersichtlich wird.<\/p>\n<p>Dann wird getestet, ob der in der Verkn&uuml;pfung gespeicherte Connect-String identisch mit dem &uuml;ber die Funktion <b>GetODBCString <\/b>ermittelten ist. In diesem Fall ist nichts zu veranlassen. Andernfalls wird die <b>Connect<\/b>-Eigenschaft neu gesetzt und mit der Anweisung <b>RefreshLink <\/b>aktiviert.<\/p>\n<p>Eigentlich w&auml;re das Neuverkn&uuml;pfen damit beendet, g&auml;be es da bei ODBC-Frontends nicht noch eine Abweichung zu normalen Access-Frontends: Wir haben oben im Abschnitt <b>Pass-Through<\/b>-Abfrage erstellen eine solche im Frontend angelegt und gespeichert.<\/p>\n<p>Dabei wurde in ihr die Eigenschaft ODBC-Verbindung gesetzt. Und die stimmt nun auch nicht mehr, sondern muss in die Neuverkn&uuml;pfen-Routine einbezogen werden. Der Code dazu ist mit dem f&uuml;r Tabellenverkn&uuml;pfungen fast identisch:<\/p>\n<pre>For Each qdf In dbs.QueryDefs<\/pre>\n<pre>    If Left(qdf.Connect, 4) = &quot;ODBC&quot; Then<\/pre>\n<pre>        If (qdf.Connect &lt;&gt; sBase) Then<\/pre>\n<pre>            qdf.Connect = sBase<\/pre>\n<pre>        End If<\/pre>\n<pre>        qdf.Close<\/pre>\n<pre>    End If<\/pre>\n<pre>Next qdf<\/pre>\n<p>Man kann die Routine zum Neuverkn&uuml;pfen nat&uuml;rlich bei jedem Start der Frontend-Datenbank ausf&uuml;hren lassen. Unter Umst&auml;nden dauert dieser Vorgang aber ziemlich lange und ist &uuml;berfl&uuml;ssig, wenn sich der Server-Standort nicht ge&auml;ndert hat. Deshalb ist es sinnvoll, zuerst zu versuchen, eine Serververbindung herzustellen und nur dann ein Neuverkn&uuml;pfen anzusto&szlig;en, wenn dies scheitert. Den Test &uuml;bernimmt in der Beispieldatenbank die Funktion <b>CanConnectBackend<\/b>. Sie gibt <b>TRUE <\/b>zur&uuml;ck, falls die Verbindung zustande kommt. Die Funktion verwendet verschiedene API-Funktionen der <b>odbc32.dll <\/b>und kann wegen ihres Umfangs hier nicht weiter erl&auml;utert werden. <\/p>\n<p>Beide Funktionen k&ouml;nnen nun in einer Startprozedur, die etwa vom <b>AutoExec<\/b>-Makro angesto&szlig;en wird, so kombiniert werden:<\/p>\n<pre>Function StartDB()<\/pre>\n<pre>    If Not CanConnectBackend() Then<\/pre>\n<pre>        If Not ChangeODBCConx() Then<\/pre>\n<pre>            MsgBox &quot;Es konnte keine Verbindung&quot; _<\/pre>\n<pre>            &amp; &quot;zum Server hergestellt &quot; _\r\n            &amp; &quot;werden.&quot; &amp; vbCrLf _<\/pre>\n<pre>            &amp; &quot;Die Anwendung wird &quot; _\r\n            &amp; &quot;beendet...&quot;, _<\/pre>\n<pre>            vbCritical, &quot;S&uuml;dsturm&quot;<\/pre>\n<pre>            Application.Quit<\/pre>\n<pre>        End If<\/pre>\n<pre>    End If<\/pre>\n<pre>End Function<\/pre>\n<p>Nur, wenn keine Verbindung zum Server hergestellt werden kann, l&auml;uft die Bedingung in die Routine zum Neuverkn&uuml;pfen. Schl&auml;gt diese selbst fehl, dann wird der Anwender mit einer entsprechenden Meldung konfrontiert und die Datenbank beendet.<\/p>\n<p><b>MySQL-Tools<\/b><\/p>\n<p>Mit den Tools <b>MySQL Administrator <\/b>und <b>QueryBrowser <\/b>stellt MySQL zwar durchaus leistungsf&auml;hige Werkzeuge zur Verf&uuml;gung, die den Vergleich mit kostenpflichtigen Programmen von Fremdanbietern nicht zu scheuen brauchen. Wer jedoch regelm&auml;&szlig;ig mit MySQL-Datenbanken arbeitet, der wird bald die zus&auml;tzlichen M&ouml;glichkeiten dieser Anwendungen sch&auml;tzen lernen.<\/p>\n<p>Man muss nicht allzu tief in die Tasche greifen, um in den Genuss von Verwaltungstools zu kommen, die kaum W&uuml;nsche offen lassen. F&uuml;r welches man sich entscheidet, ist Ansichtssache &#8211; eine Empfehlung m&ouml;chte ich ungern aussprechen. Dennoch gibt es Unterschiede in Umfang, Oberfl&auml;chenergonomie und Performance dieser Tools. Die meisten Hersteller bieten den Download von zeitlich eingeschr&auml;nkten Testversionen an. Hier eine Liste der gebr&auml;uchlichsten Tools:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>SQLyog MySQL GUI<\/b>: Das wahrscheinlich komplexeste TooI, welches in der Community Edition kostenlos erh&auml;ltlich ist, dessen Einschr&auml;nkungen allerdings ziemlich st&ouml;rend sind: <b>http:\/\/www.webyog.com\/en\/sqlyog_feature_matrix.php<\/b><\/li>\n<li class=\"aufz-hlung\"><b>EMS MySQL Manager 2007<\/b>: Ein ebenfalls sehr komplexes Tool, worunter leider die Performance etwas leidet: <b>http:\/\/sqlmanager.net\/products\/mysql\/manager\/<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Navicat MySQL<\/b>: <b>http:\/\/www.navicat.com\/<\/b><\/li>\n<li class=\"aufz-hlung\"><b>SQL-Front<\/b>: <b>http:\/\/www.sql-front.com\/<\/b><\/li>\n<li class=\"aufz-hlung\"><b>DBACentral For MySQL<\/b>: <b>http:\/\/www.microolap.com\/products\/database\/mydbacentral\/<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Dreamcoder<\/b>: Ist eigentlich kein spezialisiertes MySQL-Admin-Tool, sondern zus&auml;tzlich eine Entwicklungsumgebung f&uuml;r PHP: <b>http:\/\/www.sqldeveloper.net\/mysql-manager-developer\/dreamcoder-for-mysql.html<\/b><\/li>\n<li class=\"aufz-hlung\"><b>HeidiSQL<\/b>: Freeware. Konsequentes Open Source-Projekt: <b>http:\/\/www.heidisql.com\/<\/b><\/li>\n<\/ul>\n<p><b>Ausblick<\/b><\/p>\n<p>Erfahren Sie in einem weiteren Beitrag (Shortlink 590), wie mit Benutzerberechtigungen des MySQL-Servers umgegangen wird, welche M&ouml;glichkeiten zum Datenzugriff &uuml;ber VBA existieren, wie spezielle MySQL-Syntax eingesetzt werden kann und wie Sie die Kommunikation zwischen Access und MySQL-Server belauschen k&ouml;nnen.<\/p>\n<p class=\"zwischen-berschriftquellen\">Quellen<\/p>\n<p class=\"quellen\">[1 ] MySQL ODBC-Treiber: http:\/\/dev.mysql.com\/downloads\/connector\/odbc\/3.51.html#win32<\/p>\n<p class=\"quellen\">[2] MySQL GUI Tools Suite: http:\/\/dev.mysql.com\/downloads\/gui-tools\/5.0.html<\/p>\n<p class=\"quellen\">[3] ODBC Connector Parameter: http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/myodbc-configuration-connection-parameters.html und http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/myodbc-usagenotes-apptips.html#myodbc-usagenotes-apptips-microsoft<\/p>\n<p class=\"quellen\">[4] MySQL-Fehlercodes: http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/error-messages-server.html<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>suedsturm.zip<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/8D0A71BA-E3AF-47B1-9711-33F3519CA934\/aiu_588.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>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&uuml;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&ouml;st werden k&ouml;nnen, das soll der folgende Beitrag erl&auml;utern.<\/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":[66022008,662008,44000026,44000022],"tags":[],"class_list":["post-55000588","post","type-post","status-publish","format-standard","hentry","category-66022008","category-662008","category-Interaktiv","category-SQL_Server_und_Co"],"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>Von Access nach MySQL, Teil 2 - 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\/Von_Access_nach_MySQL_Teil_2\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Von Access nach MySQL, Teil 2\" \/>\n<meta property=\"og:description\" content=\"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&uuml;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&ouml;st werden k&ouml;nnen, das soll der folgende Beitrag erl&auml;utern.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-11T21:20:29+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c\" \/>\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=\"26\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"Von Access nach MySQL, Teil 2\",\"datePublished\":\"2021-02-11T21:20:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/\"},\"wordCount\":4901,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/771d6d83ed0b45f299afd341e2c0985c\",\"articleSection\":[\"2\\\/2008\",\"2008\",\"Interaktiv\",\"SQL Server und Co.\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/\",\"name\":\"Von Access nach MySQL, Teil 2 - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/771d6d83ed0b45f299afd341e2c0985c\",\"datePublished\":\"2021-02-11T21:20:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/771d6d83ed0b45f299afd341e2c0985c\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/771d6d83ed0b45f299afd341e2c0985c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Von_Access_nach_MySQL_Teil_2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Von Access nach MySQL, Teil 2\"}]},{\"@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":"Von Access nach MySQL, Teil 2 - 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\/Von_Access_nach_MySQL_Teil_2\/","og_locale":"de_DE","og_type":"article","og_title":"Von Access nach MySQL, Teil 2","og_description":"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&uuml;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&ouml;st werden k&ouml;nnen, das soll der folgende Beitrag erl&auml;utern.","og_url":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/","og_site_name":"Access im Unternehmen","article_published_time":"2021-02-11T21:20:29+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"Von Access nach MySQL, Teil 2","datePublished":"2021-02-11T21:20:29+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/"},"wordCount":4901,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c","articleSection":["2\/2008","2008","Interaktiv","SQL Server und Co."],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/","url":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/","name":"Von Access nach MySQL, Teil 2 - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c","datePublished":"2021-02-11T21:20:29+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/771d6d83ed0b45f299afd341e2c0985c"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Von_Access_nach_MySQL_Teil_2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Von Access nach MySQL, Teil 2"}]},{"@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\/55000588","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=55000588"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000588\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}