Partager via


Database.CreateQueryDef, méthode (DAO)

S’applique à : Access 2013, Office 2013

Crée un objet QueryDef.

Syntaxe

expression . CreateQueryDef(Name, SQLText)

expression Variable qui représente un objet Database.

Paramètres

Nom

Obligatoire/facultatif

Type de données

Description

Name

Facultatif

Variant

Variant (sous-type String) qui identifie par un nom unique le nouvel objet QueryDef.

SQLText

Facultatif

Variant

Variant (sous-type String) qui est une instruction SQL définissant la QueryDef. Si vous ne spécifiez pas cet argument, vous pouvez définir l'objet QueryDef en paramétrant sa propriété SQL avant ou après son ajout à une collection.

Valeur renvoyée

QueryDef

Remarques

Dans un espace de travail Microsoft Access, si vous spécifiez autre chose qu’une chaîne de longueur nulle pour le nom lorsque vous créez un objet QueryDef, l’objet QueryDef résultant est automatiquement ajouté à la collection QueryDefs.

Si l’objet spécifié par le nom est déjà membre de la collection QueryDefs, une erreur d’exécution se produit. Vous pouvez créer un fichier temporaire QueryDef en utilisant une chaîne nulle pour l’argument nom lorsque vous exécutez la méthode CreateQueryDef. Vous obtenez un résultat identique en affectant à la propriété Name d'un nouvel objet QueryDef une chaîne nulle ("").

Les objets QueryDef temporaires sont utiles si vous souhaitez utiliser à plusieurs reprises des instructions SQL dynamiques sans créer de nouveaux objets permanents dans la collection QueryDefs. Vous ne pouvez pas ajouter d'objet QueryDef temporaire à une collection car une chaîne nulle ne constitue pas un nom valide pour un objet QueryDef permanent. Vous avez toujours la possibilité de définir les propriétés Name et SQL du nouvel objet QueryDef et ajouter par la suite l'objet QueryDef à la collection QueryDefs.

Pour exécuter l’instruction SQL dans un objet QueryDef, utilisez la méthode Execute ou OpenRecordset.

Le recours à un objet QueryDef est la méthode généralement utilisée pour exécuter des requêtes SQL directes avec des bases de données ODBC.

Pour supprimer un objet QueryDef d’une collection QueryDefs dans une base de données de moteur de base de données Microsoft Access, appelez la méthode Delete sur la collection.

Exemple

Cet exemple utilise la méthode CreateQueryDef pour créer et exécuter une QueryDef temporaire et une permanente. La fonction GetrstTemp est requise pour exécuter cette procédure.

    Sub CreateQueryDefX() 
     
       Dim dbsNorthwind As Database 
       Dim qdfTemp As QueryDef 
       Dim qdfNew As QueryDef 
     
       Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     
       With dbsNorthwind 
          ' Create temporary QueryDef. 
          Set qdfTemp = .CreateQueryDef("", _ 
             "SELECT * FROM Employees") 
          ' Open Recordset and print report. 
          GetrstTemp qdfTemp 
          ' Create permanent QueryDef. 
          Set qdfNew = .CreateQueryDef("NewQueryDef", _ 
             "SELECT * FROM Categories") 
          ' Open Recordset and print report. 
          GetrstTemp qdfNew 
          ' Delete new QueryDef because this is a demonstration. 
          .QueryDefs.Delete qdfNew.Name 
          .Close 
       End With 
     
    End Sub 
     
    Function GetrstTemp(qdfTemp As QueryDef) 
     
       Dim rstTemp As Recordset 
     
       With qdfTemp 
          Debug.Print .Name 
          Debug.Print "  " & .SQL 
          ' Open Recordset from QueryDef. 
          Set rstTemp = .OpenRecordset(dbOpenSnapshot) 
     
          With rstTemp 
             ' Populate Recordset and print number of records. 
             .MoveLast 
             Debug.Print "  Number of records = " & _ 
                .RecordCount 
             Debug.Print 
             .Close 
          End With 
     
       End With 
     
    End Function 

Cet exemple utilise les méthodes CreateQueryDef et OpenRecordset ainsi que la propriété SQL pour interroger la table de titres dans la base de données exemple Microsoft SQL Server, Pubs et renvoyer le titre et la référence du titre du best-seller. Ensuite, il exécute une requête sur la table des auteurs et indique à l'utilisateur d'envoyer un chèque de bonification à chaque auteur en fonction de son pourcentage de droits d'auteur (la bonification totale s'élève à 1 000 euros et chaque auteur doit recevoir un pourcentage de ce montant).

Sub ClientServerX2() 
 
   Dim dbsCurrent As Database 
   Dim qdfBestSellers As QueryDef 
   Dim qdfBonusEarners As QueryDef 
   Dim rstTopSeller As Recordset 
   Dim rstBonusRecipients As Recordset 
   Dim strAuthorList As String 
 
   ' Open a database from which QueryDef objects can be  
   ' created. 
   Set dbsCurrent = OpenDatabase("DB1.mdb") 
 
   ' Create a temporary QueryDef object to retrieve 
   ' data from a Microsoft SQL Server database. 
   Set qdfBestSellers = dbsCurrent.CreateQueryDef("") 
   With qdfBestSellers 
      ' Note: The DSN referenced below must be configured to  
      '       use Microsoft Windows NT Authentication Mode to  
      '       authorize user access to the Microsoft SQL Server. 
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers" 
      .SQL = "SELECT title, title_id FROM titles " & _ 
         "ORDER BY ytd_sales DESC" 
      Set rstTopSeller = .OpenRecordset() 
      rstTopSeller.MoveFirst 
   End With 
 
   ' Create a temporary QueryDef to retrieve data from 
   ' a Microsoft SQL Server database based on the results from 
   ' the first query. 
   Set qdfBonusEarners = dbsCurrent.CreateQueryDef("") 
   With qdfBonusEarners 
      ' Note: The DSN referenced below must be configured to  
      '       use Microsoft Windows NT Authentication Mode to  
      '       authorize user access to the Microsoft SQL Server. 
      .Connect = "ODBC;DATABASE=pubs;DSN=Publishers" 
      .SQL = "SELECT * FROM titleauthor " & _ 
         "WHERE title_id = '" & _ 
         rstTopSeller!title_id & "'" 
      Set rstBonusRecipients = .OpenRecordset() 
   End With 
 
   ' Build the output string. 
   With rstBonusRecipients 
      Do While Not .EOF 
         strAuthorList = strAuthorList & "  " & _ 
            !au_id & ":  $" & (10 * !royaltyper) & vbCr 
         .MoveNext 
      Loop 
   End With 
 
   ' Display results. 
   MsgBox "Please send a check to the following " & _ 
      "authors in the amounts shown:" & vbCr & _ 
      strAuthorList & "for outstanding sales of " & _ 
      rstTopSeller!Title & "." 
 
   rstTopSeller.Close 
   dbsCurrent.Close 
 
End Sub 

L’exemple suivant montre comment créer une requête paramètre. Une requête nommée myQuery est créée avec deux paramètres, nommés Param1 et Param2. Pour ce faire, la propriété SQL de la requête est définie en tant qu’instruction SQL (langage de requête structurée) qui définit les paramètres.

Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.

    Sub CreateQueryWithParameters()
    
        Dim dbs As DAO.Database
        Dim qdf As DAO.QueryDef
        Dim strSQL As String
    
        Set dbs = CurrentDb
        Set qdf = dbs.CreateQueryDef("myQuery")
        Application.RefreshDatabaseWindow
    
        strSQL = "PARAMETERS Param1 TEXT, Param2 INT; "
        strSQL = strSQL & "SELECT * FROM [Table1] "
        strSQL = strSQL & "WHERE [Field1] = [Param1] AND [Field2] = [Param2];"
        qdf.SQL = strSQL
    
        qdf.Close
        Set qdf = Nothing
        Set dbs = Nothing
    
    End Sub