ADODB: SQL-Befehle schnell ausführen mit Execute

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.

Fehler beim Versuch, eine Tabelle erneut anzulegen

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

Schreibe einen Kommentar