#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 |
|||
|
Copyright © T'sWare All rights reserved |