QueryDef.Execute, méthode (DAO)
S’applique à : Access 2013, Office 2013
Exécute une instruction SQL sur l’objet spécifié.
Syntaxe
expression . Execute(Options)
expression Variable représentant un objet QueryDef.
Paramètres
Nom |
Obligatoire/facultatif |
Type de données |
Description |
---|---|---|---|
Options |
Facultatif |
Variant |
Remarques
Vous pouvez utiliser les constantes RecordsetOptionEnum suivantes pour 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 |
Annule 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 simultanée de dbConsistent et dbInconsistent entraîne une erreur.
Utilisez la propriété RecordsAffected de l'objet Connection, Database ou QueryDef pour déterminer le nombre d'enregistrements affectés par la méthode Execute la plus récente. Par exemple, RecordsAffected contient 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 des performances optimales dans un espace de travail Microsoft Access, plus particulièrement dans un environnement multi-utilisateur, imbriquez la méthode Execute à l'intérieur d'une transaction. Appliquez la méthode BeginTrans à l'objet Workspace actif, utilisez ensuite la méthode Execute, puis terminez la transaction en appliquant la méthode CommitTrans à 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
L’exemple suivant montre comment exécuter une requête avec paramètres. La collection Parameters permet de définir le paramètre Organization de la requête myActionQuery avant l’exécution de celle-ci.
Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.
Public Sub ExecParameterQuery()
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("myActionQuery")
'Set the value of the QueryDef's parameter
qdf.Parameters("Organization").Value = "Microsoft"
'Execute the query
qdf.Execute dbFailOnError
'Clean up
qdf.Close
Set qdf = Nothing
Set dbs = Nothing
End Sub