#082 クエリーのSQLをVBAで変更するには? VBA

クエリーの抽出条件(WHERE句)だけを状況に応じて変えるにはパラメータクエリーを使うのが便利ですが、場合によっては、1つのクエリーのSQL文を直接編集することによってさまざまなバリエーションに対応させたいということもあります。例えば、あるテーブルが1月〜12月の月別データのフィールドを持っているとします。これを現在月によって、1〜3月・4〜6月・7〜9月・10〜12月のように、ある3ヶ月分のフィールドだけが抽出されるようにしたい場合です。

このような場合に、"既存"のクエリーのSQL文をVBAから変更するには次のようにします。なお、SQL文を編集するにあたっては、すべて文字列操作によって行わなければならず、またSQL文の構成についての知識が多少必要となります。
Dim dbs As Database
Dim qdf As QueryDef
Dim strSQL As String
Dim strFROM As String
Const cstrFLD1_3 = "受注1月, 受注2月, 受注3月"
Const cstrFLD4_6 = "受注4月, 受注5月, 受注6月"
Const cstrFLD7_9 = "受注7月, 受注8月, 受注9月"
Const cstrFLD10_12 = "受注10月, 受注11月, 受注12月"

Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("受注実績クエリー")
'クエリーの現在のSQL文を変数にセットします
strSQL = qdf.SQL

****** 以降、strSQL を編集していきます ******

'FROM句以降を変数に保持します
strFROM = Mid$(strSQL, InStr(strSQL, "FROM "))
'SQL文のSELECT句を編集します
strSQL = "SELECT "
Select Case Month(Date)
  Case 1 To 3
    strSQL = strSQL & cstrFLD1_3
  Case 4 To 6
    strSQL = strSQL & cstrFLD4_6
  Case 7 To 9
    strSQL = strSQL & cstrFLD7_9
  Case 10 To 12
    strSQL = strSQL & cstrFLD10_12
End Select

****** 最後に、strSQL を再組み立てします ******
strSQL = strSQL & vbCrLf & strFROM

'編集されたSQL文をクエリーに書き戻します
'(これによって編集後のクエリーがデータベースに保存されます)
qdf.SQL = strSQL
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved