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

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