Geht nicht? Doch es geht und zwar mit zwei zusätzlichen DLL's, die extra dafür entwickelt worden sind und auch noch weiter entwickelt werden. Hierbei handelt es sich um eine Standard-DLL, sowie eine ActiveX-DLL, die Ihnen ein Connection-Objekt und ein Recordset-Objekt zur Verfügung stellt und alle wichtigen und benötigten Befehle zum Öffnen von Datenbanken, Erstellen von Tabellen, Ausführen von Abfragen und Bearbeiten von Datensätzen enthält. Installation und Einrichtung von MySQL Nachfolgend erfahren Sie alle notwendigen Schritte, um MySQL auf Ihrem System zu installieren und einzurichten. Zunächst müssen Sie sich das MySQL-Installationsprogramm downloaden:
Nach erfolgreichem Download entpacken Sie die Zip-Datei und starten dann SETUP.EXE. Als Ziel wird das Verzeichnis c:\mysql vorgegeben. Im nächsten Schritt wählen Sie die Einstellung Typical und klicken auf Next >, um den Installationsvorgang zu starten. Die Installation selbst geht schnell vonstatten und verlief auf unseren Testrechnern reibungslos. Nachdem MySQL nun auf Ihrem System installiert ist, öffnen Sie den Windows Explorer und wechseln in das Verzeichnis c:\mysql\bin und doppelklicken auf die Datei winmysqladmin.exe. Hierbei handelt es sich um ein SQL-Administrationstool für Windows. Wenn MySQL noch nicht eingerichtet bzw. konfiguriert ist, erscheint zunächst folgender Dialog:
Hier legen Sie den Benutzernamen, sowie das gewünschte Kennwort fest. Diese Daten benötigen Sie dann später, um eine Datenbank erstellen zu können bzw. auf Daten einer Datenbank zugreifen zu können.
![]() Bevor wir aber richtig mit VB und MySQL beginnen, prüfen wir, ob MySQL bereits eine Test-Datenbank erstellt hat. Klicken Sie auf das Ampelsymbol im Systemtray und wählen aus dem PopUp-Menü den Eintrag Show. Im Registerblatt Databases sehen Sie alle vorhandenen MySQL-Datenbanken. Sollte im linken Fenster nur mysql stehen, also kein Eintrag test, so müssen wir zunächst noch unsere Test-Datenbank erstellen. Starten Sie hierzu die Datei mysql.exe im Ordner c:\mysql\bin und geben folgende Zeile in die Eingabeaufforderung ein: mysql> Create Database test; MySQL sollte diesen Befehl mit der Meldung: "Query OK, 1 row affected" quittieren. Anschließend beenden Sie die MySQL-Eingabeaufforderung wieder: mysql> exit; MyVbQL.DLL - Einfacher MySQL-Datenbankzugriff in VB Nachdem MySQL auf Ihrem System eingerichtet ist, kann es nun endlich los gehen. Bisher musste man für den MySQL-Datenbankzugriff immer ADO bzw. MyODBC verwenden. Es gibt aber noch eine andere Lösung! MyVbQL.DLL Download: Alle wichtigen Infos zum Umgang und der Handhabung zu MyVbQL.dll finden Sie auf der Webseite des Entwicklers unter Entpacken Sie das Zip-File und kopieren anschließend die beiden DLL-Dateien in das Systemverzeichnis. Anschließend müssen Sie noch die Datei MyVbQL.dll registrieren. Verwenden von MyVbQL.DLL in Visual Basic Starten Sie die VB Entwicklungsumgebung, erstellen ein neues Projekt und aktivieren imDialog Projekt - Verweise den Eintrag MySQL Visual Basic API v2.0.0. Wenn Sie jetzt einmal im Objekt-Katalog einen Blick auf die Eigenschaften und Methoden werfen, wird Ihnen sicherlich einiges von ADO her bekannt vorkommen. Im Vergleich zu ADO/MyODBC ist MyVbQl-Code aber schneller. Jedoch wo es Vorteile gibt, gibt es auch Nachteile:
Für unser kleines Beispielprojekt benötigen wir eine Form mit folgenden Objekten:
Verbindung zur MySQL-Datenbank herstellen Für die MySQL-Verbindung benötigen wir ein Connection-Objekt, für das spätere Auslesen der Tabelle ein Recordset-Objekt: Option Explicit ' Die Deklarationen sind fast wie bei ADO ' Connection-Object Private oConn As New MYSQL_CONNECTION ' Recordset-Object Private oRs As MYSQL_RS Den Servername, sowie die Benutzerdaten definieren wir in unserem Beispiel als Konstanten: ' Servername und Benutzerdaten Private Const sServer As String = "localhost" Private Const sUsername As String = "Ihr Benutzername" Private Const sPassword As String = "Ihr Passwort" Private Const sDBName As String = "test" Private Const sTable As String = "names" In unserem Beispielprojekt soll eine Tabelle mit dem Namen names und den Feldern id, vorname und nachname erstellt werden. Die Daten zeigen wir im FlexGrid-Control an. Hierzu bereiten wir im Form_Load Ereignis das FlexGrid entsprechend vor: ' Ein par Einstellungen fürs FlexGrid Private Sub Form_Load() With Me.MSFlexGrid1 ' 3 Spalten und zunächst nur 1 Zeile für ' die Spaltenüberschriften .Cols = 3 .Rows = 1 ' Spaltenüberschriften .TextMatrix(0, 0) = "ID" .TextMatrix(0, 1) = "Vorname" .TextMatrix(0, 2) = "Nachname" ' Spaltenbreiten .ColWidth(0) = 500 .ColWidth(1) = 2000 .ColWidth(2) = 2000 ' zunächst inaktiv .Enabled = False End With End Sub Über die Schaltfläche cmdConnect soll die Verbindung zur MySQL-Datenbank hergestellt werden Private Sub cmdConnect_Click() ' oConn.OpenConnection "Rechnername", _ ' "Ihr Benutzername", "Ihr Passwort", _ ' "Name der Datenbank" ' ' Wir öffnen die Verbindung zum MySQL Server ' Statt 'Localhost' kann auch die IP verwendet werden. Diese ' erfahren Sie im WinMySQLAdmin im Register'Environment', ' wenn Sie auf 'Extended Server Status' klicken. oConn.OpenConnection sServer, _ sUsername, sPassword, sDBName ' Statusabfrage If (oConn.State = MY_CONN_CLOSED) Then ' Falls Verbindung nicht geöffnet, Fehlerangabe! MySQL_Error Else ' Bei erfolgreicher Verbindung, Verbindungsdaten ausgeben MsgBox "Connected to Database: " & oConn.DbName, _ vbInformation, "MySQL-Testprojekt" End If End Sub Evtl. Fehler prüfen wir in einer universellen Funktion MySQL_Error: ' Fehlerausgabe bei Verbindungsfehler Private Function MySQL_Error() As Boolean With oConn.Error If .Number = 0 Then Exit Function MsgBox "Error " & .Number & ": " & .Description MySQL_Error = True End With End Function Verbindung zum MySQL-Datenbank trennen Um eine bestehende Verbindung wieder zu trennen, muss die CloseConnection-Methode des Connection-Objekts aufgerufen werden: ' Verbindung beenden Private Sub cmdDisconnect_Click() If Not oConn Is Nothing Then oConn.CloseConnection If MySQL_Error() = False Then Set oConn = Nothing MSFlexGrid1.Rows = 1 End If End Sub Erstellen einer neuen Tabelle Im nächsten Schritt erfahren Sie, wie man eine neue Tabelle mit allen benötigtenDatenbankfeldern erstellt. Für unser Beispiel brauchen wir hierzu drei Felder: ID, VORNAME und NACHNAME Private Sub cmdCreateTable_Click() Dim sSQL As String ' Tabelle erstellen sSQL = "CREATE TABLE " & sTable & " (" _ & "id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, " _ & "vorname CHAR(30) NOT NULL, " _ & "nachname CHAR(30) NOT NULL)" oConn.Execute sSQL If MySQL_Error() = False Then MsgBox "Tabelle wurde erstellt." End If End Sub Wie Sie sehen, wird die Tabelle per SQL-Anweisung erstellt - eingeleitet durch die beiden Schlüsselwörter CREATE TABLE. Danach wird der Tabellenname angegeben. In unserem Beispiel wurde dieser als Konstante sTable deklariert. Die einzelnen Felder sind durch Komma voneinander zu trennen und in Klammern zu setzen. Allgemeine Syntax: CREATE TABLE Name (Feld1, Feld2, Feld3) Nachfolgend eine kurze Erläuterung zur obigen SQL-Anweisung: id: Hierbei handelt es sich um ein sogenanntes "AutoIncrement"-Feld, d.h. der mySQL-Server kümmert sich selbständig um die Vergabe der Nummer. Gleichzeitig wird das Feld als Primärschlüssel festgelegt. Über die id ist dann jeder Datensatz später eindeutig gekennzeichnet. vorname und nachname: Hierbei handelt es sich um TEXT-Felder, d.h. es können beliebige Daten bis zu einer Länge von 30 Zeichen gespeichert werden (CHAR(30)). Gleichzeitig wird festgelegt, dass keine NULL-Werte (leere Zeichenfolgen) akzeptiert werden (NOT NULL). Löschen einer Tabelle Eine bereits existierende Tabelle lässt sich natürlich auch wieder löschen - einschl. aller bereits in der Tabelle gespeicherten Daten: ' Tabelle löschen Private Sub cmdDropTable_Click() Dim sSQL As String If MsgBox("Tabelle wirklich löschen?", vbYesNo, "Löschen") = vbYes Then sSQL = "DROP TABLE IF EXISTS " & sTable oConn.Execute sSQL If MySQL_Error() = False Then MsgBox "Tabelle wurde gelöscht!" End If End If End Sub Abfragen erstellen und Anzeigen der Ergebnisse im FlexGrid Um nun den Inhalt (die Datensätze) der Tabelle im FlexGrid-Control anzeigen zu können, müssen wir ein Recordset erstellen (in Verbindung mit einer SQL-Abfrage) und dieses "zeilenweise" auslesen und in das FlexGrid übertragen: Private Sub cmdRequery_Click() ' RS-Objekt vom Connection-Objekt ableiten und ' Status anzeigen. ' ' Nicht wie bei ADO. Bei der MyVbQl.Dll wird das ' Recordset direkt von der Connection abgeleitet. Dim sSQL As String Dim bError As Boolean ' Alle Datensätze selektieren sSQL = "SELECT * FROM " & sTable Set oRs = oConn.Execute(sSQL) bError = MySQL_Error() If Not bError Then ' Daten im Grid anzeigen FillGrid End If ' Recordset schließen If Not oRs Is Nothing Then oRs.CloseRecordset Set oRs = Nothing End Sub ' Funktion zum Füllen des FlexGrids Function FillGrid() Dim i As Long Dim nRow As Long With MSFlexGrid1 ' Zählvariable für die aktuelle Zeile nRow = 0 .Rows = oRs.RecordCount + 1 While Not oRs.EOF nRow = nRow + 1 For i = 0 To oRs.FieldCount - 1 ' Aktuellen Wert ins FlexGrid kopieren .TextMatrix(nRow, i) = oRs.Fields(i).Value .Col = i 'Spalte zuweisen Next i ' auch hier gibt es ein "MoveNext" :-) oRs.MoveNext Wend If .Row > 0 Then .Row = 1 .Enabled = (.Rows > 1) End With End Function Preisfrage: sSQL = "SELECT * FROM " & sTable & " ORDER BY nachname" Set oRs = oConn.Execute(sSQL) Wie Sie sehen, verhält sich das Ganze genau wie Sie es von einer "normalen" Access-Datenbank gewohnt sind Das Eingabeformular zum Hinzufügen/Ändern von Daten Um einen neuen Datensatz hinzuzufügen bzw. einen vorhandenen Datensatz zu ändern benötigen wir ein entsprechendes "Eingabeformular". Fügen Sie dem Projekt eine neue Form hinzu, mit folgenden Objekten:
Code von frmInput Option Explicit Private Sub cmdAbort_Click() ' Abbrechen Me.Tag = False Me.Hide End Sub Private Sub cmdOK_Click() ' OK Me.Tag = True Me.Hide End Sub Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) ' Schließen If UnloadMode <> 1 Then Cancel = True cmdAbort.Value = True End If End Sub Private Sub Form_Unload(Cancel As Integer) ' Beenden Set frmInput = Nothing End Sub Private Sub txtNachname_Change() ' Prüfen cmdOK.Enabled = (Trim$(txtVorname.Text) <> "" _ And Trim$(txtNachname.Text) <> "") End Sub Private Sub txtVorname_Change() ' Prüfen cmdOK.Enabled = (Trim$(txtVorname.Text) <> "" _ And Trim$(txtNachname.Text) <> "") End Sub Hinzufügen, Ändern und Löschen von Datensätzen Kommen wir nun zu dem Punkt, wie man neue Datensätze hinzufügt bzw. bestehende Datensätze verändert oder löscht. Einesvorweg: Wir brauchen hierzu kein Recordset-Objekt! Alle genannten Aktionen werden wiederum per SQL-Anweisung ausgeführt. Hinzufügen eines neuen Datensatzes INSERT INTO Tabelle (Feld1, Feld) VALUES ('Wert1', 'Wert2') Das Hinzufügen von neuen Daten erfolgt über die beiden Schlüsselwörter INSERT INTO. Danach muss zunächst der Tabellennamen angegeben werden (in unserem Fall wieder die Konstante sTable). Die betroffenen Datenfelder sind dann in runde Klammern zu setzen und durch Komma voneinander zu trennen. Das Schlüsselwort VALUES gibt an, dass jetzt die Werte folgen, die - ganz wichtig - in Hochkomma gesetzt, und ebenfalls durch ein Komma voneinander getrennt angegeben werden müssen! Private Sub cmdAdd_Click() ' Datensatz hinzufügen Dim nResult As Long Dim sVorname As String Dim sNachname As String Load frmInput With frmInput .Show vbModal If .Tag = True Then sVorname = .txtVorname.Text sNachname = .txtNachname.Text ' Datensatz in Tabelle einfügen oConn.Execute "INSERT INTO " & sTable & " (vorname, nachname) " & _ "VALUES ('" & sVorname & "', '" & sNachname & "')" If MySQL_Error() = False Then ' Datensatz dem Grid hinzufügen With MSFlexGrid1 .AddItem CStr(oConn.LastInsertID) & vbTab & _ sVorname & vbTab & sNachname End With End If End If End With Unload frmInput End Sub Ändern eines bestehenden Datensatzes Für das Ändern eines bestehenden Datensatzes ist es wichtig, dass wir den Datensatz eindeutig referenzieren können. Dies ist in unserem kleinen Beispielprojekt aber kein Problem, da jeder Datensatz über eine eindeutige ID-Nummer verfügt (id-Feld): UPDATE Tabelle SET Feld1 = 'Wert1' [, Feld2 = 'Wert2'] WHERE id = idnummer Eingeleitet wird das Ändern eines Datensatzes durch das Schlüsselwort UPDATE. Danach folgt wieder der Tabellenname. Über das Schlüsselwort SET wird das Feld und sein neuer Inhalt angegeben. Hierbei ist wieder zu beachten, dass der Wert (der neue Feldinhalt) wieder in Hochkomma gesetzt wird. Sollen mehrere Felder aktualisiert werden, sind diese durch ein Komma voneinander getrennt anzugeben. Der betroffene Datensatz selbstwird durch die WHERE-Bedingung festgelegt. ' Datensatz ändern Private Sub cmdEdit_Click() Dim sVorname As String Dim sNachname As String Dim nId As Long Dim sSQL As String ' Aktuell selektierten Datensatz ändern With MSFlexGrid1 nId = Val(.TextMatrix(.Row, 0)) sVorname = .TextMatrix(.Row, 1) sNachname = .TextMatrix(.Row, 2) End With ' Eingabeformular anzeigen Load frmInput With frmInput .txtVorname = sVorname .txtNachname = sNachname .Show vbModal If .Tag Then ' Wurden die Daten verändert? If .txtVorname.Text <> sVorname Or .txtNachname <> sNachname Then ' Ja, also Datensatz aktualisieren sVorname = .txtVorname.Text sNachname = .txtNachname.Text ' SQL-Anweisung sSQL = "UPDATE " & sTable & " SET " & _ "vorname = '" & sVorname & "', " & _ "nachname = '" & sNachname & "' " & _ "WHERE id = " & CStr(nId) ' Ausführen oConn.Execute sSQL If MySQL_Error() = False Then ' Grid aktualisieren With MSFlexGrid1 .TextMatrix(.Row, 1) = sVorname .TextMatrix(.Row, 2) = sNachname End With End If End If End If End With Unload frmInput End Sub Löschen eines Datensatzes Genau wie beim Ändern eines Datensatzes ist es auch für das Löschen wichtig, dass wir den Datensatz eindeutig referenzieren können: DELETE FROM Tabelle WHERE id = idnummer ' Datensatz löschen Private Sub cmdDelete_Click() Dim sSQL As String Dim nId As Long If MsgBox("Aktuellen Datensatz löschen?", vbYesNo, "Löschen") = vbYes Then With MSFlexGrid1 ' SQL-Abfrage nId = .TextMatrix(.Row, 0) sSQL = "DELETE FROM " & sTable & " WHERE id = " & CStr(nId) ' Ausführen oConn.Execute sSQL If MySQL_Error() = False Then ' FlexGrid aktualisieren If .Rows = 2 Then .Rows = 1 Else .RemoveItem .Row End If End If End With End If End Sub Zusammenfassung Mit unserem kleinen MyVBQL.DLL Workshop sollten Sie nun in der Lage sein, eine MySQL-Datenbank per VB zu öffnen, Tabellen zu erstellen (bzw. löschen), sowie Datensätze hinzuzufügen, zu ändern und zu löschen. Weiterhin haben wir Ihnen gezeigt, wie sich der Inhalt einer MySQL-Datenbank-Tabelle auslesen und in einem geeigneten Control anzeigen lässt. Befehlsreferenz
Das Beispielprojekt Damit Sie jetzt nicht alles ganz neu erstellen müssen, finden Sie nachfolgend den Download-Link für das im Workshop verwendete Beispielprojekt. Das Download-Projekt ist im Gegensatz zum Workshop-Projekt noch ein wenig erweitert. So lässt sich z.B. im FlexGrid immer nur eine gesamte Zeile auswählen. Auch werden die einzelnen CommandButtons autom. enabled/disabled, falls eine bestimmte Aktion ausgeführt bzw. nicht ausgeführt werden kann. Hinweis: Dieser Workshop wurde bereits 84.760 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevCommand 4.0 ![]() Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats ![]() Roland Wutzke LINQ to ListView Mit dieser VB2008 Klasse stellen wir Ihnen eine Möglichkeit vor, den Inhalt samt ColumnHeader Informationen eines ListViews als XML zu speichern und wieder zu laden. TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |