Accessでお仕事 変数とコントロールを含む SQL ステートメントの作成

変数とコントロールを含む SQL ステートメントの作成

データ アクセス オブジェクト (DAO) を操作するとき、コードに SQL ステートメントを記述する必要がある場合もあります。たとえば、QueryDef オブジェクトを新規作成する場合は、そのオブジェクトの SQL プロパティに有効な SQL 文字列を設定します。また、Recordset オブジェクトを作成するときにも SQL ステートメントが必要になる場合があります。

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

ユーザーが指定する値や、状況によって変化する値を使ってクエリを作成する場合は、クエリに変数やコントロールの値を含める必要があります。Jet データベース エンジンは SQL ステートメントをすべて処理しますが、変数やコントロールは処理しません。したがって、Access で最初にこれらの値を評価し、SQL ステートメントの文字列として Jet データベース エンジンに渡すことができるように、SQL ステートメントを構築する必要があります。

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

Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM 受注 WHERE 受注日 >#96-3-31#;"
Set qdf = dbs.CreateQueryDef(" 4 四半期", strSQL)

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

Dim dbs As Database, qdf As QueryDef, strSQL As String
Dim dteStart As Date
dteStart = #96-3-31#
Set dbs = CurrentDb
strSQL = "SELECT * FROM 受注 WHERE 受注日" _
    & "> #" & dteStart & "#;"
Set qdf = dbs.CreateQueryDef(" 4 四半期", strSQL)

次の例では、[受注] フォームの [受注日] というコントロールの値を使って QueryDef オブジェクトを作成します。コントロールは完全な参照で指定する必要があります。また、日付値を示す数値記号 (#) を SQL 文字列に含めます

Dim dbs As Database, qdf As QueryDef, strSQL As String
Set dbs = CurrentDb
strSQL = "SELECT * FROM 受注 WHERE 受注日" _
    & "> #" & Forms!受注!受注日 & "#;"
Set qdf = dbs.CreateQueryDef(" 4 四半期", strSQL)