変数とコントロールを含む SQL ステートメントを構築する

データ アクセス オブジェクト (DAO) または ActiveX データ オブジェクト (ADO) を操作する際に、SQL ステートメントをコード内に記述する必要がある場合もあります。 これを、SQL コードを "インライン" にすると言います。

たとえば、新しい QueryDef オブジェクトを作成するときは、その SQL プロパティに有効な SQL 文字列を設定する必要があります。 ADO Recordset オブジェクトを使用するときは、その "Source/データベース元" プロパティに有効な SQL 文字列を設定します。

SQL ステートメントを構築するには、SQL ビューでクエリを作成し、デザイン グリッドに切り替えて、SQL ステートメントをコピーしてコード内に貼り付けます。

ユーザーが入力する値や、状況によって変化する値をクエリのベースにしなければならないことがよくあります。 その場合、変数またはコントロールの値をクエリに含める必要があります。 Access データベース エンジンはすべての SQL クエリを処理しますが、変数やコントロールは処理しません。 したがって、Access でまずこれらの値を特定してから、Access データベース エンジンに渡される SQL ステートメントにこれらの値を連結するように SQL ステートメントを作成する必要があります。

DAO を使用して SQL ステートメントをビルドする

次の例では、簡単な SQL ステートメントを使用して QueryDef オブジェクトを作成します。 このクエリは 2006 年 3 月 31 日以降に入力された [受注] テーブルにあるすべての受注を返します。

Public Sub GetOrders() 
 
   Dim dbs As DAO.Database 
   Dim qdf As DAO.QueryDef 
   Dim strSQL As String 
 
   Set dbs = CurrentDb 
   strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-2006#;" 
   Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL) 
 
End Sub

次の例では、変数に格納されている値を使って、同じ QueryDef オブジェクトを作成します。 日付値を示す数値記号 (#) を文字列に含め、日付値と連結されるようにします。

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Dim dteStart As Date 
dteStart = #3-31-2006# 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & dteStart & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

次の例では、Orders フォームの OrderDate というコントロールの値を使用して 、QueryDef オブジェクトを作成します。 コントロールへの完全な参照を指定し、文字列内に日付を示す番号記号 (#) を含める点に注意してください。

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & Forms!Orders!OrderDate & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

ADO を使用して SQL ステートメントをビルドする

このセクションでは、前のセクションと同じステートメントを作成しますが、今回は ADO をデータ アクセス メソッドとして使用します。

次のコード例では、簡単な SQL ステートメントを使用して QueryDef オブジェクトを作成します。 このクエリは 2006 年 3 月 31 日以降に入力された [受注] テーブルにあるすべての受注を返します。

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate >#3-31-2006#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

次の例では、変数に格納されている値を使って、同じ QueryDef オブジェクトを作成します。 日付値を示す数値記号 (#) を文字列に含め、日付値と連結されるようにします。

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Dim dteStart As Date 
dteStart = #3-31-2006# 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & dteStart & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

次のコード例では、Orders フォームの OrderDate というコントロールの値を使用して 、QueryDef オブジェクトを作成します。 コントロールへの完全な参照を提供し、文字列内の日付を示す番号記号が含まれていることに注意してください。

Dim dbs As Database, qdf As QueryDef, strSQL As String 
Set dbs = CurrentDb 
strSQL = "SELECT * FROM Orders WHERE OrderDate" _ 
    & "> #" & Forms!Orders!OrderDate & "#;" 
Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL)

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。