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ファイルに出力するためのメソッドもあります。