前回、OpenRecordset() の引数にテーブル名を使いましたが、SQL文でも同じ結果になることを確認してみましょう。
さらにSQL文を使うことのメリットを考えながら試してください。テーブル名の場合は表示が固定されていましたが、SQL文の場合は自由自在に変化させることができます。
【1】Access で VBEを起動し、標準モジュールの test6 を表示します。
*VBEは「Altキー」+「F11キー」で起動できます。
【2】「test6」に以下のように Subプロシージャを1つ追加します。
Sub dispData2()
Dim db As DAO.Database
Set db = CurrentDb
Dim mySql As String
mySql = "SELECT * FROM T01Prefecture"
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset(mySql)
Do Until rs.EOF
Debug.Print rs.Fields("PREF_CD") & " " & rs.Fields("PREF_NAME")
'Debug.Print rs!PREF_CD & " " & rs!PREF_NAME
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub
dispData2() は、ほとんど dispData() と同じなので、コピーして作成してください。
違う部分だけを赤枠で囲んでみました。もちろんプロシージャ名は変わります。
プログラムの準備ができたら実行してみましょう。
【3】Subプロシージャの dispData2() を実行してください。
・dispData2()の実行結果
SQL文を使っても、テーブル名の時と同じ結果になることが確認できました。
【4】次の操作のため、イミディエイト ウィンドウをクリアします。
【5】SQL文を少し変更します。
mySql = "SELECT * FROM T01Prefecture WHERE PREF_CD >= 40"
【6】再び Subプロシージャの dispData2() を実行してください。
・dispData2()の実行結果
SQL文が反映され、実行結果が変わりました。PREF_CD が 40 以上の都道府県が抽出されています。
【7】さらにSQL文を変更します。
mySql = "SELECT * FROM T01Prefecture"
mySql = mySql & " WHERE PREF_CD >= 40"
mySql = mySql & " ORDER BY PREF_CD DESC"
SQL文は単なる文字列なので、複数行に分けて書くことができます。変数の文字列がどんどん連結していきます。
* WHERE と ORDER の前に半角スペースがある点に注意してください。半角スペースが無いとエラーになります。初心者が一番忘れがちな点です。
【8】Subプロシージャの dispData2() を実行してください。
・dispData2()の実行結果
九州地区の都道府県が「降順」で表示されました。
あとはSQL文を変えることで、いろんな表示ができます。
【解説】
今回使ったSQL文について、簡単に説明しておきます。SQL文の詳しい説明については Access SQL初心者入門講座 をご覧ください。
(1)テーブル「T01Prefecture」から、全てのフィールドとレコードを表示します。
SELECT * FROM T01Prefecture
(2)PREF_CD が 40 以上のレコードを抽出します。
WHERE PREF_CD >= 40
(3)PREF_CD の降順でレコードを並べ替えます。
ORDER BY PREF_CD DESC
最近のシステム開発では、SQL文は欠かせないものになっています。
SQLは非常に強力な言語です。プログラムで書くと複雑な処理でも、SQL文を使うと、まるでデータベースと対話するような感覚で、簡単に実現することができます。
今回は手動でSQL文を書き換えましたが、プログラミング言語でSQL文を動的に組み立てることで、さらに便利な使い方ができます。