Möchtest Du den gesamten Artikel lesen? Und vielleicht sogar den Artikel im PDF-Format und die Beispieldateien herunterladen? Dann hole Dir den Artikel gleich hier - völlig kostenlos!
ADODB bietet verschiedene Techniken, um SQL-Befehle zum Abfragen oder Ändern von Daten auszuführen. Die bekannteste zum Abfragen von Daten dürfte die OpenRecordset-Methode sein. Für das Ausführen von Anweisungen kann man für vollen Komfort am besten die Command-Klasse mit der Execute-Methode verwenden. Aber auch die Connection-Klasse bietet bereite eine Execute-Methode an. Mit dieser lässt sich schnell und flexibel Einiges erledigen. Welche Möglichkeiten sie bietet und wie wir diese für den Datenzugriff nutzen können, zeigen wir in diesem Artikel.
Die Execute-Methode des Connection-Objekts ist die einfachste Möglichkeit, eine Abfrage zum Ändern der Daten einer SQL Server-Datenbank auszuführen. Damit können wir jedoch nicht nur Daten ändern, in dem wir eine der folgenden Aktualisierungsabfrage nutzen:
- DELETE: Löschen von Datensätzen
- UPDATE: Aktualisieren von Datensätzen
- INSERT INTO: Einfügen von Datensätzen
Wir können durch das Ausführen der Execute-Methode auch solche SQL-Anweisungen ausführen, mit denen wir den Entwurf des Datenmodells selbst ändern – zum Anlegen, Ändern oder Löschen von Tabellen, Feldern, Indizes und vielem mehr.
Erstellen einer Tabelle mit Execute
Im ersten Beispiel erstellen wir erst einmal eine Tabelle, mit der wir danach weitere Aktionen durchführen. Dieses Beispiel finden wir in Listing 1. Hier deklarieren wir zunächst ein Connection-Objekt sowie eine Zeichenkette zum Speichern der SQL-Anweisung.
Public Sub TabelleErstellen() Dim cnn As ADODB.Connection Dim strSQL As String Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=MSOLEDBSQL;Data Source=amvDesktop2023;Initial Catalog=Anlagen;" _ & "Integrated Security=SSPI;" cnn.Open strSQL = "CREATE TABLE tblKategorien (" & vbCrLf strSQL = strSQL & " KategorieID INT IDENTITY(1,1) PRIMARY KEY," & vbCrLf strSQL = strSQL & " Kategoriebezeichnung VARCHAR(255) NOT NULL" & vbCrLf strSQL = strSQL & ");" cnn.Execute strSQL cnn.Close Set cnn = Nothing End Sub
Listing 1: Prozedur zum Erstellen einer Tabelle
Danach erstellen wir das Connection-Objekt und speichern es in der Variablen cnn. Wir weisen die Verbindungszeichenfolge zu und öffnen die Verbindung mit der Open-Anweisung.
Danach stellen wir in der Variablen strSQL die SQL-Anweisung zusammen, die wie folgt aussieht:
CREATE TABLE tblKategorien ( KategorieID INT IDENTITY(1,1) PRIMARY KEY, Kategoriebezeichnung VARCHAR(255) NOT NULL );
Diese brauchen wir nun nur noch mit der Execute-Methode des Connection-Objekts auszuführen. Damit haben wir bereits eine Tabelle zum Experimentieren angelegt.
Woher wissen wir in diesem Fall, dass das Anlegen erfolgreich war? Ganz einfach dadurch, dass wir keinen Fehler ausgelöst haben.
Wir können die Gegenprobe machen, indem wir die Prozedur einfach erneut aufrufen. Damit versuchen wir, eine Tabelle anzulegen, die bereits vorhanden ist. Dies löst einen Fehler aus, der in Access mit der Meldung aus Bild 1 angezeigt wird.
Bild 1: Fehler beim Versuch, eine Tabelle erneut anzulegen
Datensatz anlegen mit Execute
Im zweiten Beispiel wollen wir dieser Tabelle einen Datensatz hinzufügen (siehe Listing 2). Dieser soll im Feld Kategoriebezeichnung den Wert Beispielkategorie erhalten. Das Feld KategorieID wird automatisch gefüllt, da wir dieses mit dem Schlüsselwort IDENTITY(1,1) als Autowertfeld definiert haben.
Public Sub DatensatzHinzufuegen() Dim cnn As ADODB.Connection Dim strSQL As String Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=MSOLEDBSQL;Data Source=amvDesktop2023;Initial Catalog=Anlagen;" _ & "Integrated Security=SSPI;" cnn.Open strSQL = "INSERT INTO tblKategorien(Kategoriebezeichnung) VALUES(''Beispielkategorie'')" cnn.Execute strSQL cnn.Close Set cnn = Nothing End Sub
Listing 2: Prozedur zum Hinzufügen eines Datensatzes
Auch diese Anweisung führen wir mit der Execute-Methode aus. Das Ergebnis ist ein neuer Datensatz in der Tabelle tblKategorien.
Anzahl angelegter Datensätze ermitteln
Wie können wir hier ermitteln, ob das Anlegen erfolgreich war? Dazu ermitteln wir die Anzahl der von der Abfrage betroffenen Datensätze (siehe Listing 3).
Public Sub DatensatzHinzufuegenMitErgebnis() Dim cnn As ADODB.Connection Dim strSQL As String Dim lngRecordsAffected As Long Set cnn = New ADODB.Connection cnn.ConnectionString = "Provider=MSOLEDBSQL;Data Source=amvDesktop2023;Initial Catalog=Anlagen;" _ & "Integrated Security=SSPI;" cnn.Open strSQL = "INSERT INTO tblKategorien(Kategoriebezeichnung) VALUES(''Beispielkategorie'')" cnn.Execute strSQL, lngRecordsAffected MsgBox "Anzahl angelegter Datensätze: " & lngRecordsAffected cnn.Close Set cnn = Nothing End Sub
Listing 3: Prozedur zum Hinzufügen eines Datensatzes mit Ergebnis
Diese Information können wir aus dem zweiten Parameter der Execute-Anweisung entnehmen. Dieser müssen wir dazu eine zuvor deklarierte Variable übergeben. Sie wird dann beim Ausführen der Abfrage mit der Anzahl der betroffenen Datensätze gefüllt.
Das Ergebnis der Abfrage geben wir dann in einer Meldung aus.
Aber kann es beim Anlegen von Datensätzen überhaupt ein anderes Ergebnis als 1 geben? Nein, das ist nicht der Fall. Es kann lediglich passieren, dass die Abfrage einen Fehler auslöst.
Wir können hier sogar zwei Datensätze in aufeinanderfolgenden INSERT INTO-Anweisungen einfügen. Dazu ersetzen wir die entsprechende Anweisung wie folgt:
strSQL = "INSERT INTO tblKategorien(Kategoriebezeichnung) VALUES(''Beispielkategorie'');INSERT INTO tblKategorien(Kategoriebezeichnung) VALUES(''Beispielkategorie1'')"
Dies liefert jedoch immer noch den Wert 1 zurück. Der Grund ist, dass hier immer nur das Ergebnis der zuletzt verwendeten Anweisung genutzt wird.
In T-SQL gibt es jedoch im Gegensatz zu Access-SQL die Möglichkeit, hinter dem VALUES-Schlüsselwort mehrere Klammernpaare mit den hinzuzufügenden Feldwerten anzugeben.
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