QueryDefs 集合 (DAO)
适用于:Access 2013、Office 2013
QueryDefs 集合包含 Microsoft Access 数据库引擎数据库中的 Database 对象的所有 QueryDef 对象。
说明
要新建 QueryDef 对象,请使用 CreateQueryDef 方法。 在 Microsoft Access 工作区中,如果为 name 参数提供了字符串,或者将新的 QueryDef 对象的 Name 属性显式设置为非零长度字符串,那么将创建一个会自动追加到 QueryDefs 集合并保存到磁盘的永久 QueryDef。 提供零长度字符串作为 name 参数或将 Name 属性显式设置为零长度字符串将导致生成临时的 QueryDef 对象。
若要按照序号或 Name 属性设置来引用集合中的 QueryDef 对象,可以使用下列任何一种语法形式:
QueryDefs(0)
QueryDefs("name")
QueryDefs![name]
仅可以按照分配给临时 QueryDef 对象的对象变量引用这些对象。
示例
以下示例创建一个新的 QueryDef 对象,并将其追加到 Northwind Database 对象的 QueryDefs 集合。 然后,该示例枚举 QueryDefs 集合和新 QueryDef 的 Properties 集合。
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
以下示例使用 CreateQueryDef 方法创建并执行临时和永久的 QueryDef。 若要使该过程运行,需要使用 GetrstTemp 函数。
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
以下示例说明如何执行参数查询。 参数集合用于在执行查询前设置 myActionQuery 查询的 Organization 参数。
示例代码提供方: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
以下示例说明如何打开基于参数查询的 Recordset。
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()