vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Datenbanken   |   VB-Versionen: VB5, VB601.03.03
MySQL ohne ADO und MyODBC

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.

Autor:  Dieter Otter / Oliver GreinerBewertung:     [ Jetzt bewerten ]Views:  84.946 

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:

 MySQL Max 3.23.54 für Windows (13.4)
Die aktuellsten Versionen von MySQL finden Sie auf der MySQL-Webseite unter  www.mysql.com

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:

WinMySQLAdmin
WinMySQLAdmin-Tool

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.

MySQL Connection-Status
Nach dem Klicken auf OK sollten Sie im Traybereich der Taskbar (rechts wo die Uhrzeit angezeigt wird) ein Ampelsymbol wiederfinden. Die Ampel zeigt hierbei den Verbindungsstatus zum MySQL-Server an. Wenn die Ampel grün leuchtet ist die Verbindung in Ordnung und Sie können sofort loslegen

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.

MySQL Databases

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
Hierbei handelt es sich um zwei DLL's (libmySQL.dll und MyVbQL.dll), die von icarz, Inc. als Alternative zu Microsoft ADO - MyODBC entwickelt wurden. Die beiden DLL's belegen zusammen gerade mal knapp 300 KB Speicherplatz auf Ihrer Festplatte - im Gegensatz zu ADO, für das Sie ca. 10 MB einrechnen müssen. Zudem lässt sich MyVbQL wesentlich einfacher installieren: einfach in das Systemverzeichnis kopieren und MyVbQL.dll als ActiveX-Komponente registrieren. Dies erledigen Sie am besten mit dem REGSVR32.EXE Tool oder noch einfacher über folgenden Tipp:  Register und Unregister via Kontextmenü. Die zweite DLL (libmySQL.dll) ist eine Windows Standard-DLL, d.h. sie braucht nicht registriert zu werden.

Download:  MyVbQK.zip (206 KB)

Alle wichtigen Infos zum Umgang und der Handhabung zu MyVbQL.dll finden Sie auf der Webseite des Entwicklers unter  www.icarz.com/mysql

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:

  • Der Verbindungsaufbau könnte etwas länger dauern als gewohnt, vor allem wenn der MySQL Server auf einem anderen Rechner und unter einem anderen Betriebssystem läuft.
  • MyVbQL.DLL unterstützt noch keine Blobs und ist nicht ADO kompatibel.
  • Recordset-Objekte können nicht als Basis für Datengebundene Steuerelemente genutzt werden.

Für unser kleines Beispielprojekt benötigen wir eine Form mit folgenden Objekten:

Form1
Form1 mit allen benötigten 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:
Wie muss die SQL-Abfrage lauten, wenn die Daten sortiert nach Nachname selektiert werden sollen?

  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:

frmInput
frmInput für das Hinzufügen/Ändern von Daten

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

AktionBefehl
Verbindung herstellenOpenConnection "Servername", "Username", "Password", "Datenbank"
Verbindung trennenCloseConnection
Tabelle erstellenExecute "CREATE TABLE Name (Feld1, Feld2, ... Feldx)"
Tabelle löschenExecute "DROP TABLE IF EXISTS Name"
Recordset erstellenSet Rs = oConn.Execute "SELECT * FROM Name WHERE ... ORDER BY ..."
Daten hinzufügenExecute "INSERT INTO Name (Feld1, Feld2) VALUES ('Wert1', 'Wert2')"
Daten ändernExecute "UPDATE Name SET Feld1 = 'Wert1' [, Feld2 = 'Wert2'] WHERE id = idnummer"
Daten löschenExecute "DELETE FROM Name WHERE id = idnummer"

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:
Bevor Sie das Demoprojekt starten, müssen Sie unbedingt die korrekten Zugangsdaten zum MySQL-Server festlegen (siehe Konstanten-Deklaration im Allgemein-Teil der frmMain!)
 

Dieser Workshop wurde bereits 84.946 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (4 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel