Database.Execute, méthode (DAO)
S’applique à : Access 2013, Office 2013
Exécute une requête action ou exécute une instruction SQL sur l’objet spécifié.
Syntaxe
expression . Execute(Query, Options)
expression Variable qui représente un objet Database.
Paramètres
Nom |
Obligatoire/facultatif |
Type de données |
Description |
---|---|---|---|
Query |
Obligatoire |
String |
|
Options |
Facultatif |
Variant |
Remarques
Vous pouvez utiliser les constantes RecordsetOptionEnum suivantes comme options.
Constante |
Description |
---|---|
dbDenyWrite |
Refuse les autorisations d’accès en écriture aux autres utilisateurs (espaces de travail Microsoft Access uniquement) |
dbInconsistent |
(Option par défaut) Exécute les mises à jour incohérentes (espaces de travail Microsoft Access uniquement) |
dbConsistent |
Exécute les mises à jour cohérentes (espaces de travail Microsoft Access uniquement) |
dbSQLPassThrough |
Exécute une requête SQL directe. Lorsque vous sélectionnez cette option, l'instruction SQL est transmise à une base de données ODBC pour traitement (espaces de travail Microsoft Access uniquement). |
dbFailOnError |
Ne restaure pas les mises à jour si une erreur se produit (espaces de travail Microsoft Access uniquement). |
dbSeeChanges |
Génère une erreur d'exécution si un autre utilisateur modifie les données que vous-même êtes en train de modifier (espaces de travail Microsoft Access uniquement) |
dbRunAsync |
Exécute la requête en mode asynchrone (objets ODBCDirect Connection et QueryDef uniquement). |
dbExecDirect |
Exécute l'instruction sans appeler préalablement la fonction API ODBC SQLPrepare (objets ODBCDirect Connection et QueryDef uniquement). |
Remarque
[!REMARQUE] Les espaces de travail ODBCDirect ne sont pas pris en charge dans Microsoft Access 2013. Utilisez ADO si vous voulez accéder aux sources de données externes sans avoir recours au moteur de base de données Microsoft Access.
Remarque
[!REMARQUE] Les constantes dbConsistent et dbInconsistent s'excluent mutuellement. Vous pouvez utiliser l'une ou l'autre dans une instance donnée d' OpenRecordset, mais pas les deux à la fois. L'utilisation de dbConsistent et dbInconsistent génère une erreur.
La méthode Execute est valide uniquement pour les requêtes action. Si vous utilisez Execute avec un autre type de requête, une erreur est générée. Dans la mesure où une requête Action ne renvoie aucun enregistrement, Execute ne renvoie pas d'objet Recordset. (L'exécution d'une requête SQL directe dans un espace de travail ODBCDirect ne renvoie pas d'erreur si aucun objet Recordset n'est renvoyé.)
Utilisez la propriété RecordsAffected de l'objet Connection, Database ou QueryDef pour déterminer le nombre d'enregistrements affectés par le dernier appel de la méthode Execute. RecordsAffected contient, par exemple, le nombre d'enregistrements supprimés, mis à jour ou insérés lors de l'exécution d'une requête Action. Lorsque vous utilisez la méthode Execute pour exécuter une requête, la valeur de la propriété RecordsAffected de l'objet QueryDef correspond au nombre d'enregistrements affectés.
Dans un espace de travail Microsoft Access, si vous fournissez une instruction SQL correcte du point de vue syntaxique et que vous détenez les autorisations appropriées, la méthode Execute n'échouera pas, même si aucune ligne ne peut être modifiée ou supprimée. Par conséquent, utilisez toujours l'option dbFailOnError lorsque vous vous servez de la méthode Execute pour exécuter une requête Mise à jour ou Suppression. Cette option génère une erreur d'exécution et annule toutes les modifications accomplies dans le cas où certains enregistrements affectés sont verrouillés et ne peuvent pas être mis à jour ou supprimés.
Dans les versions antérieures du moteur de base de données Microsoft Jet, les instructions SQL étaient automatiquement incorporées dans des transactions implicites. Si une partie d'une instruction exécutée avec dbFailOnError échouait, l'instruction était entièrement annulée. Pour améliorer les performances, ces transactions implicites ont été supprimées à partir de la version 3.5. Si vous mettez à jour un code DAO plus ancien, envisagez l'utilisation de transactions explicites autour des instructions Execute.
Pour obtenir de meilleures performances dans un espace de travail Microsoft Access, en particulier dans un environnement multi-utilisateur, imbriquez la méthode Execute dans une transaction. Utilisez la méthode BeginTrans sur l'objet Workspace actif, puis utilisez la méthode Execute et terminez la transaction en appelant la méthode CommitTrans sur l'objet Workspace. Cette opération permet d’enregistrer les modifications sur disque et de libérer tous les verrous appliqués pendant l’exécution de la requête.
Exemple
Cet exemple illustre l'exécution de la méthode Execute à partir d'un objet QueryDef et d'un objet Database. Les procédures ExecuteQueryDef et PrintOutput sont nécessaires à l'exécution de cette procédure.
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