適用先: Access 2013、Office 2013
新しい QueryDef オブジェクトを作成します。
構文
式 。CreateQueryDef(Name, SQLText)
式Database オブジェクトを表す変数です。
パラメーター
名前 |
必須かどうか |
データ型 |
説明 |
---|---|---|---|
名前 |
省略可能 |
Variant |
新しい QueryDef の一意の名前を表す、サブタイプが文字列型 (String) であるバリアント型 (Variant) の値。 |
SQLText |
省略可能 |
Variant |
QueryDef を定義する SQL ステートメントである Variant (String サブタイプ)。 この引数を省略した場合、コレクションへの追加前または追加後に、 SQL プロパティを設定して、 QueryDef を定義できます。 |
戻り値
QueryDef
注釈
Microsoft Access ワークスペースでは、QueryDef の作成時に名前として長さ 0 の文字列以外を指定すると、作成された QueryDef オブジェクトが QueryDefs コレクションに自動的に追加されます。
名前で指定されたオブジェクトが既に QueryDefs コレクションのメンバーである場合は、実行時エラーが発生します。 CreateQueryDef メソッドを実行すると、名前の引数に長さ 0 の文字列を使用して一時的な QueryDef を作成できます。 新しく作成した QueryDef の Name プロパティを長さ 0 の文字列 ("") に設定することにより、これを行うこともできます。
一時的な QueryDef オブジェクトは、QueryDefs コレクション内に新しい永続的オブジェクトを作成せずに動的 SQL ステートメントを繰り返し使用する場合に便利です。 長さ 0 の文字列は永続的な QueryDef オブジェクトの有効な名前ではないので、一時的な QueryDef をコレクションに追加することはできません。 新しく作成した QueryDef オブジェクトの Name プロパティと SQL プロパティはいつでも設定が可能であり、設定後に QueryDef を QueryDefs コレクションに追加できます。
QueryDef オブジェクトで SQL ステートメントを実行するには、Execute メソッドまたは OpenRecordset メソッドを使用します。
ODBC データベースを使用して SQL パススルー クエリを実行する場合は、QueryDef オブジェクトの使用をお勧めします。
Microsoft Access データベース エンジンのデータベースで QueryDefs コレクションから QueryDef オブジェクトを削除するには、コレクションの Delete メソッドを使用します。
例
この例では、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
次の例では、 CreateQueryDef メソッドと OpenRecordset メソッド、および SQL プロパティを使用して、Microsoft SQL Server サンプル データベース Pubs の題名のテーブルをクエリし、最もよく売れている本の題名と題名識別子を返します。 次に、著者のテーブルをクエリし、印税の割合に基づいてそれぞれの著者にボーナス小切手を送信するようユーザーに指示します (ボーナスの合計は 1,000 ドルで、それぞれの著者はこの金額から印税の割合に応じた額を受け取ります)。
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
次の例は、パラメーター クエリを作成する方法を示しています。 Param1 および Param2 という名前の 2 つのパラメーターを使用して myQuery という名前のクエリを作成します。 これを行うために、クエリの SQL プロパティは、パラメータを定義する Structured Query Language (SQL) ステートメントに設定されます。
サンプル コードの提供元:Microsoft 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