Database.Execute Method (DAO)

Office 2013 und höher

Letzte Änderung:Montag, 9. März 2015

Gilt für:Access 2013 | Access 2016

Führt eine Aktionsabfrage oder eine SQL-Anweisung zu dem angegebenen Objekt aus.

Ausdruck.Execute(Abfrage, OptionEn)

Ausdruck Eine Variable, die ein Database-Objekt darstellt.

Parameter

Name

Erforderlich/Optional

Datentyp

Beschreibung

Query

Erforderlich

Zeichenfolge

Options

Optional

Variante

Sie können folgende RecordsetOptionEnum-Konstante für options verwenden.

Konstante

Beschreibung

dbDenyWrite

Verweigert anderen Benutzern die Schreibberechtigung (nur Microsoft Access-Arbeitsbereiche).

dbInconsistent

(Standardeinstellung) Führt inkonsistente Aktualisierungen aus (nur Microsoft Access-Arbeitsbereiche).

dbConsistent

Führt konsistente Aktualisierungen aus (nur Microsoft Access-Arbeitsbereiche).

dbSQLPassThrough

Führt eine SQL-Pass-Through-Abfrage aus. Durch Festlegen dieser Option wird der SQL-Ausdruck zur Verarbeitung an eine ODBC-Datenbank übergeben (nur Microsoft Access-Arbeitsbereiche).

dbFailOnError

Setzt die Aktualisierungen zurück, wenn ein Fehler auftritt (nur Microsoft Access-Arbeitsbereiche).

dbSeeChanges

Generiert einen Laufzeitfehler, wenn ein anderer Benutzer Daten ändert, die Sie bearbeiten (nur Microsoft Access-Arbeitsbereiche).

dbRunAsync

Führt die Abfrage asynchron aus (nur ODBCDirect-Connection- und -QueryDef-Objekte).

dbExecDirect

Führt die Anweisung aus, ohne zuvor die SQLPrepare ODBC-API-Funktion aufzurufen (nur ODBCDirect Connection- und QueryDef-Objekte).

Hinweis Hinweis

ODBCDirect-Arbeitsbereiche werden in Microsoft Access 2013 nicht unterstützt. Verwenden Sie ADO, wenn Sie auf externe Datenquellen zugreifen möchten, ohne das Microsoft Access-Datenbankmodul verwenden zu müssen.

Hinweis Hinweis

Die Konstanten dbConsistent und dbInconsistent schließen sich gegenseitig aus. Sie können eins von beiden, jedoch nicht beide in einer angegebenen Instanz von OpenRecordset verwenden. Durch die Verwendung der dbConsistent- und dbInconsistent-Konstanten wird ein Fehler erzeugt.

Die Execute-Methode ist nur für Aktionsabfragen gültig. Wenn Sie die Execute-Methode mit einem anderen Abfragetyp verwenden, tritt ein Fehler auf. Da eine Aktionsabfrage keine Datensätze zurückgibt, gibt die Execute-Methode keinen Datensatz zurück. (Durch Ausführen einer SQL-Pass-Through-Abfrage in einem ODBCDirect-Arbeitsbereich wird kein Fehler zurückgegeben, wenn kein Datensatz zurückgegeben wird).

Verwenden Sie die RecordsAffected-Eigenschaft des Connection-, Database- oder QueryDef-Objekts, um die Anzahl der von der aktuellsten Execute-Methode betroffenen Datensätze zu ermitteln. RecordsAffected enthält beispielsweise die Anzahl gelöschter, aktualisierter oder eingefügter Datensätze bei der Ausführung einer Aktionsabfrage. Wenn Sie zum Ausführen einer Abfrage die Execute-Methode verwenden, wird bei der RecordsAffected-Eigenschaft des QueryDef-Objekts die Anzahl der betroffenen Datensätze festgelegt.

In einem Microsoft Access-Arbeitsbereich erzeugt die Execute-Methode keinen Fehler, wenn Sie eine syntaktisch korrekte SQL-Anweisung angeben und über die entsprechenden Berechtigungen verfügen – sogar dann, wenn keine einzige Zeile bearbeitet oder gelöscht werden kann. Verwenden Sie deshalb immer die dbFailOnError-Option, wenn Sie zum Ausführen eines Updates oder zum Löschen einer Abfrage die Execute-Methode. Diese Option generiert einen Laufzeitfehler und setzt alle erfolgreichen Änderungen zurück, wenn einer der betroffenen Datensätze gesperrt ist und deshalb nicht aktualisiert oder gelöscht werden kann.

In früheren Versionen des Microsoft Jet-Datenbankmoduls werden SQL-Anweisungen automatisch in implizite Transaktionen integriert. Wenn ein Teil einer Anweisung, die mit dbFailOnError ausgeführt wurde, einen Fehler verursacht, würde die gesamte Anweisung zurückgesetzt. Um die Leistung zu verbessern, wurden diese impliziten Transaktionen ab Version 3.5 entfernt. Wenn Sie einen älteren DAO-Code aktualisieren, sollten Sie erwägen, explizite Transaktionen um Execute-Anweisungen zu verwenden.

Um die beste Leistung in einem Microsoft Access-Arbeitsbereich zu erzielen, insbesondere in einer Mehrbenutzerumgebung, schachteln Sie die Execute-Methode innerhalb einer Transaktion. Verwenden Sie die BeginTrans-Methode bei dem aktuellen Workspace-Objekt, und anschließend die Execute-Methode, und vervollständigen Sie die Transaktion mithilfe der CommitTrans-Methode im Arbeitsbereich. Dadurch werden die Änderungen auf einem Datenträger gespeichert und während der Ausführung der Abfrage eingesetzte Sperren aufgehoben.

In diesem Beispiel demonstrates the Execute method when run from both a QueryDef object and a Database object. The ExecuteQueryDef and PrintOutput procedures are required for this procedure to run.

Sub ExecuteX() 
 
 Dim dbsNorthwind As Database 
 Dim strSQLChange As String 
 Dim strSQLRestore As String 
 Dim qdfChange As QueryDef 
 Dim rstEmployees As Recordset 
 Dim errLoop As Error 
 
 ' Define two SQL statements for action queries. 
 strSQLChange = "UPDATE Employees SET Country = " & _ 
 "'United States' WHERE Country = 'USA'" 
 strSQLRestore = "UPDATE Employees SET Country = " & _ 
 "'USA' WHERE Country = 'United States'" 
 
 Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
 ' Create temporary QueryDef object. 
 Set qdfChange = dbsNorthwind.CreateQueryDef("", _ 
 strSQLChange) 
 Set rstEmployees = dbsNorthwind.OpenRecordset( _ 
 "SELECT LastName, Country FROM Employees", _ 
 dbOpenForwardOnly) 
 
 ' Print report of original data. 
 Debug.Print _ 
 "Data in Employees table before executing the query" 
 PrintOutput rstEmployees 
 
 ' Run temporary QueryDef. 
 ExecuteQueryDef qdfChange, rstEmployees 
 
 ' Print report of new data. 
 Debug.Print _ 
 "Data in Employees table after executing the query" 
 PrintOutput rstEmployees 
 
 ' Run action query to restore data. Trap for errors, 
 ' checking the Errors collection if necessary. 
 On Error GoTo Err_Execute 
 dbsNorthwind.Execute strSQLRestore, dbFailOnError 
 On Error GoTo 0 
 
 ' Retrieve the current data by requerying the recordset. 
 rstEmployees.Requery 
 
 ' Print report of restored data. 
 Debug.Print "Data after executing the query " & _ 
 "to restore the original information" 
 PrintOutput rstEmployees 
 
 rstEmployees.Close 
 
 Exit Sub 
 
Err_Execute: 
 
 ' Notify user of any errors that result from 
 ' executing the query. 
 If DBEngine.Errors.Count > 0 Then 
 For Each errLoop In DBEngine.Errors 
 MsgBox "Error number: " & errLoop.Number & vbCr & _ 
 errLoop.Description 
 Next errLoop 
 End If 
 
 Resume Next 
 
End Sub 
 
Sub ExecuteQueryDef(qdfTemp As QueryDef, _ 
 rstTemp As Recordset) 
 
 Dim errLoop As Error 
 
 ' Run the specified QueryDef object. Trap for errors, 
 ' checking the Errors collection if necessary. 
 On Error GoTo Err_Execute 
 qdfTemp.Execute dbFailOnError 
 On Error GoTo 0 
 
 ' Retrieve the current data by requerying the recordset. 
 rstTemp.Requery 
 
 Exit Sub 
 
Err_Execute: 
 
 ' Notify user of any errors that result from 
 ' executing the query. 
 If DBEngine.Errors.Count > 0 Then 
 For Each errLoop In DBEngine.Errors 
 MsgBox "Error number: " & errLoop.Number & vbCr & _ 
 errLoop.Description 
 Next errLoop 
 End If 
 
 Resume Next 
 
End Sub 
 
Sub PrintOutput(rstTemp As Recordset) 
 
 ' Enumerate Recordset. 
 Do While Not rstTemp.EOF 
 Debug.Print " " & rstTemp!LastName & _ 
 ", " & rstTemp!Country 
 rstTemp.MoveNext 
 Loop 
 
End Sub 

Anzeigen: