Partager via


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