MySQL-Zugriff ohne MyODBC

Für viele Anwender fällt ein ODBC-Zugriff auf eine MySQL-Datenbank flach, weil sie auf ihrem Rechner keine zusätzliche Software wie etwa MyODBC installieren dürfen. Mit einer speziellen MySQL-DLL und einigen Klassen einer Open Source-Bibliothek gelingt dies auch ohne Installation von MyODBC – Sie brauchen nur noch eine einzige DLL in das Verzeichnis zu kopieren, in dem sich auch Ihre Datenbankdatei befindet. Dieser Beitrag zeigt die Möglichkeiten dieser Lösung auf.

Den Großteil der Arbeit der in diesem Beitrag vorgestellten Lösung übernimmt das Projekt vbmysqldirect, das Sie unter http://www.vbmysql.com/projects/vbmysqldirect herunterladen können. Gleich vorneweg der Hinweis, dass die in der hier vorgestellten Lösung verwendeten Klassen der GNU Library General Public License unterliegen. Das bedeutet unter anderem, dass Sie Anwendungen, welche diese frei verfügbaren Klassen nutzen, nicht kommerziell vertreiben dürfen.

Voraussetzungen

Einzige Voraussetzung für den Einsatz der in diesem Beitrag vorgestellten Lösung ist das Vorhandensein der Bibliothek libmysql.dll im Verzeichnis der Datenbankdatei. Diese DLL gelangt üblicherweise mit der Installation von MySQL auf den Rechner, kann aber auch anderweitig bezogen werden – zum Beispiel von dieser Seite: http://www.mysql.com/downloads/connector/c/. Die Beispieldatenbank enthält diese DLL in einem OLE-Feld der Tabelle tblTools, von wo aus sie mit der Prozedur ExportDLL in das aktuelle Datenbankverzeichnis exportiert werden kann. Vom Projekt vbmysqldirect importieren Sie einige Klassen und ein Standardmodul in die Datenbank, von der aus Sie direkt auf eine MySQL-Datenbank zugreifen möchten. In Bild 1 sehen Sie diese Module. Wenn Sie die Module importiert und die DLL in das Anwendungszeichnis exportiert haben, können Sie loslegen. Wie das geht, zeigt das folgende Beispiel.

pic002.png

Bild 1: Das Modul modDeclare und die Klassen dieses Projekts enthalten die Methoden für den Zugriff auf MySQL-Datenbanken.

Datenbanken ausgeben

Die Objekte und Methoden von vbmysqldirect lehnen sich stark an das ADO-Objektmodell an. Dennoch liefern sie einige MySQL-spezifische Methoden. Mit der ersten zeigen wir, wie Sie alle Datenbanken eines angegebenen MySQL-Servers anzeigen. Die Prozedur aus Bild 2). Dieses Formular ist an die Tabelle tblConnections gebunden, welche Verbindungsdaten für den Zugriff auf die einzelnen Datenbanken enthält. Dabei deklariert und erstellt sie zunächst ein Objekt namens conn auf Basis der Klasse MYSQL_CONNECTION. Diese wird mit den im aktuellen Datensatz des Formulars gespeicherten Daten geöffnet. Außerdem verwendet die Prozedur ein Objekt des Typs MYSQL_RS, welches dem Recordset-Objekt entspricht.

Listing 1: Zusammenstellen einer Liste aller Datenbanken eines MySQL-Servers

Private Sub cmdDatenbankenAnzeigen_Click()
    Dim conn As MYSQL_CONNECTION
    Dim rst As MYSQL_RS
    Dim strDatenbanken As String
    Set conn = New MYSQL_CONNECTION
    Set rst = New MYSQL_RS
    conn.OpenConnection Me!Server, Me!Benutzername, Me!Kennwort, Me!Datenbank, Me!Port
    Set rst = conn.Show(MY_SHOW_DATABASES)
    Do While Not rst.EOF
        strDatenbanken = strDatenbanken & rst.Fields("Database").Value & ";"
        rst.MoveNext
    Loop
    Me!lstDatenbanken.RowSource = strDatenbanken
End Sub

pic003.png

Bild 2: Das Formular frmMySQL zeigt einige Datenbank-Informationen an.

Für das Füllen des Recordsets mit den Namen der Datenbanken der mit der Connection referenzierten MySQL-Instanz gibt es eine spezielle Methode namens Show mit dem Parameter MY_SHOW_DATABASES. Das so gefüllte Recordset-Objekt lässt sich per Do While-Schleife und der MoveNext-Anweisung durchlaufen und gibt die Namen der enthaltenen Datenbanken preis. Die dabei zusammengestellte Liste landet schließlich im Listenfeld lstDatenbanken, das als Wertliste ausgelegt ist.

Tabellen auflisten

Als nächstes möchten Sie möglicherweise alle Tabellen einer bestimmten Datenbank auflisten. Dies erledigt die Prozedur aus Listing 2. Sie erstellt wiederum Objekte auf Basis der Klassen MYSQL_CONNECTION und MYSQL_RS. Das Recordset-Objekt wird wiederum mit der Show-Methode gefüllt, diesmal jedoch mit dem Parameter MY_SHOW_TABLES. Dies liefert ein Recordset mit nur einem Feld für den Tabellennamen, aber mit je einem Datensatz pro enthaltener Tabelle.

Listing 2: Ausgeben aller Tabellen einer Datenbank im Direktfenster


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar