5. 共通モジュールを利用してデータベースに接続する
リスト1のスクリプトの場合、データベースに接続するための手続きは、
- ADODB.Connection
- ADODB.Command
- ADODB.Recordset
の3つのCOMを利用していますが、慣れないうちはその使い方が少々やっかいです。このような手続きは、共通モジュールにしてしまいましょう。
そうすれば、COMの使い方を理解しなくても、かんたんにデータベースを操作することができます。
例として、これから紹介する共通モジュールを利用した場合、リスト1と同じ処理を行うスクリプトは、次のように簡素化されます。
Option Explicit
'--------------------------------------------------------------------------------
'<<< 共通モジュール インポート >>>
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Function Include(ByVal strFileName)
Include = fso.OpenTextFile(strFileName, 1, False).ReadAll()
End Function
Execute Include(".\DBConnect.vbs") 'データベース操作クラス
Set fso = Nothing
'--------------------------------------------------------------------------------
'データベース操作クラス(共通モジュール)をインスタンス化します。
Dim dbm
Set dbm = New DBConnect
'データベース接続情報を定義します。
Dim sSvr
sSvr = "(local)"
Dim sDB
sDB = "会社"
Dim sUID
sUID = "testuser"
Dim sPWD
sPWD = "password01"
'データベースに接続します。
dbm.MSSQLConnect sSvr, sDB, sUID, sPWD
'実行するSQLを定義します。
Dim sSQL
sSQL = "SELECT [名前] FROM [従業員] WHERE [コード] = 1"
'SQLを実行します。
dbm.ExecQuery sSQL
'取得した結果をメッセージに表示します。
MsgBox CStr(dbm.Recordset.Fields("名前").Value)
'データベースから切断します。
dbm.Disconnect
共通モジュールのインポート部分を除けば、かなりシンプルなスクリプトになっているかと思います。シンプルであるがゆえ、接続先となるデータベース情報を変更したり、実行するSQLを変更することも容易です。
SQL Server以外にも、Microsoft Accessデータベースに接続する方法も紹介しましょう。SQL Serverデータベースに接続するメソッドはMSSQLConnect()でしたが、Accessデータベースの場合、MDBConnect()となり、そのメソッドのパラメータに接続先のMDBファイルのパスを指定するだけです。
Option Explicit
'--------------------------------------------------------------------------------
'<<< 共通モジュール インポート >>>
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Function Include(ByVal strFileName)
Include = fso.OpenTextFile(strFileName, 1, False).ReadAll()
End Function
Execute Include(".\DBConnect.vbs") 'データベース操作クラス
Set fso = Nothing
'--------------------------------------------------------------------------------
'データベース操作クラス(共通モジュール)をインスタンス化します。
Dim dbm
Set dbm = New DBConnect
'MDBファイルのパスを指定します。
Dim sPath
sPath = ".\sampledb.mdb"
'データベースに接続します。
dbm.MDBConnect(sPath)
'実行するSQLを定義します。
Dim sSQL
sSQL = "SELECT [名前] FROM [従業員] WHERE [コード] = 1"
'SQLを実行します。
dbm.ExecQuery sSQL
'取得した結果をメッセージに表示します。
MsgBox CStr(dbm.Recordset.Fields("名前").Value)
'データベースから切断します。
dbm.Disconnect
DBConnect共通モジュールを使用してSQL Serverデータベースに接続した場合と比較すると、変更点は上述のとおり、たったの2箇所だけであることが理解できるかと思います。
それ以外の部分、例えばSQLを実行する部分や実行結果を取得する部分については、SQL Serverデータベースを扱う場合と変更がありません。
また、DBConnect共通モジュールには、ODBCドライバを経由して様々なデータベースに接続することが可能ですし、SQLの実行で取得して結果セットをMicrosoft ExcelやCSVファイルに出力するためのメソッドもあります。
