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()