Compartir a través de


Colección QueryDefs (DAO)

Se aplica a: Access 2013, Office 2013

Una colección QueryDefs contiene todos los objetos QueryDef de un objeto de Base de datos que hay en una base de datos de motor de base de datos de Microsoft Access.

Comentarios

Para crear un nuevo objeto QueryDef, utilice el método CreateQueryDef. En un área de trabajo de Microsoft Access, si coloca una cadena para el argumento name o establece explícitamente la propiedad Name del nuevo objeto QueryDef en una cadena que no sea de longitud cero, creará un QueryDef permanente que se anexará automáticamente a la colección QueryDefs y se guardará en el disco. Suministrar una cadena de longitud cero como argumento name o establecer explícitamente la propiedad Name en una cadena de longitud cero generará un objeto QueryDef temporal.

Para hacer referencia a un objeto QueryDef en una colección por su número ordinal o por la configuración de la propiedad Nombre, use cualquiera de las siguientes formas de sintaxis:

QueryDefs(0)

QueryDefs("name")

QueryDefs! [nombre]

Puede hacer referencia a objetos QueryDef temporales solo por las variables de objeto que les haya asignado.

Ejemplo

En este ejemplo se crea un nuevo objeto QueryDef y se anexa a la colección QueryDefs del objeto Base de datos de Northwind. Luego se enumera la colección QueryDefs y la colección Propiedades del nuevo QueryDef.

    Sub QueryDefX() 
     
       Dim dbsNorthwind As Database 
       Dim qdfNew As QueryDef 
       Dim qdfLoop As QueryDef 
       Dim prpLoop As Property 
     
       Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     
       ' Create new QueryDef object. Because it has a  
       ' name, it is automatically appended to the  
       ' QueryDefs collection. 
       Set qdfNew = dbsNorthwind.CreateQueryDef("NewQueryDef", _ 
             "SELECT * FROM Categories") 
     
       With dbsNorthwind 
          Debug.Print .QueryDefs.Count & _ 
             " QueryDefs in " & .Name 
     
          ' Enumerate QueryDefs collection. 
          For Each qdfLoop In .QueryDefs 
             Debug.Print "  " & qdfLoop.Name 
          Next qdfLoop 
     
          With qdfNew 
             Debug.Print "Properties of " & .Name 
     
             ' Enumerate Properties collection of new  
             ' QueryDef object. 
             For Each prpLoop In .Properties 
                On Error Resume Next 
                Debug.Print "  " & prpLoop.Name & " - " & _ 
                   IIf(prpLoop = "", "[empty]", prpLoop) 
                On Error Goto 0 
             Next prpLoop 
          End With 
     
          ' Delete new QueryDef because this is a  
          ' demonstration. 
          .QueryDefs.Delete qdfNew.Name 
          .Close 
       End With 
     
    End Sub 

En este ejemplo se usa el método CreateQueryDef para crear y ejecutar un QueryDef temporal y otro permanente. La función GetrstTemp es necesaria para que se ejecute este procedimiento.

    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 

El siguiente ejemplo muestra cómo ejecutar una consulta de parámetros. La colección Parameters se usa para establecer el parámetro Organization de la consulta myActionQuery antes de que esta se ejecute.

Código de ejemplo proporcionado por la Referencia del programador de Microsoft Access 2010.

    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

En el siguiente ejemplo, se muestra cómo abrir un Recordset basado en una consulta de parámetros.

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Get the parameter query
    Set qfd = dbs.QueryDefs("qryMyParameterQuery")
    
    'Supply the parameter value
    qdf.Parameters("EnterStartDate") = Date
    qdf.Parameters("EnterEndDate") = Date + 7
    
    'Open a Recordset based on the parameter query
    Set rst = qdf.OpenRecordset()