QueryDefs コレクション (DAO)
適用先: Access 2013、Office 2013
QueryDefs コレクションには、Microsoft Access データベース エンジン データベースの Database オブジェクトのすべての QueryDef オブジェクトが含まれます。
注釈
新しい QueryDef オブジェクトを作成するには、 CreateQueryDef メソッドを使用します。 Microsoft Access ワークスペースで、引数 name に文字列を指定するか、新しい QueryDef オブジェクトの Name プロパティを明示的に長さ 0 の文字列以外に設定すると、QueryDefs コレクションに自動的に追加されてディスクに保存される、永続的な QueryDef が作成されます。 引数 name として長さ 0 の文字列を指定するか、Name プロパティを長さ 0 の文字列に明示的に設定すると、一時的な QueryDef オブジェクトが作成されます。
コレクション内の QueryDef オブジェクトを、コレクションで付けられたインデックスまたは Name プロパティの設定値で参照するには、次のいずれかの構文を使います。
QueryDefs (0)
QueryDefs (「名前」)
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
次の例は、パラメータ クエリを実行する方法を示しています。 Parameters コレクションは、クエリが実行される前に 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()