ExcelVBAマクロ 【番外】Access不要、Excelも不要、VBScriptからaccdb(mdb)を操作する方法

プログラミング

前回ExcelVBAマクロを使ってAccess用DBを操作する方法を紹介しました。

今回紹介する方法はExcelすら使わずaccdb(mdb)を操作する方法です。

いきなり言い訳

冒頭のいきなりですが言い訳から入ります。

今回紹介する方法は環境によってうまくいく場合とうまくいかない場合がありました。(我が家の端末2台で確認したところ1台はすんなり実行できたのですがもう1台は何をやっても接続できませんでした)

ただ言い訳するだけではなく一応まとめにトラブルシューティングを準備しますができない場合は諦めが必要かもしれません。

AccessのDBを準備

DBは前回準備したものを使います。(ExcelVBAマクロで操作したDBそのままです)

中身のデータはVBA100本ノックの「VBA100本ノック 9本目:フィルターコピー」のデータになっています。

「Score.accdb」の中身(「Score.mdb」も同様)

VBScriptでAccessのDBからデータを取得

まずはAccessのDBからデータを取得するコードを紹介します。

VBSコード

※ExcelVBAマクロから引き続きソースコードの貼り付けでエラーが起きてしまいうまく貼り付けられなかったのでソースコード自体を上げておきます。

ダウンロードしたファイルは拡張子「.txt」が余分についているので削除してファイル名を「DB接続.vbs」に直し、同じフォルダに「Score.accdb」を配置してください。(拡張子「.vbs」をアプロードできなかったので後ろに「.txt」を付けてあります)

「Score.mdb」で試す場合には「FILE_NAME_DB」を「Score.accdb」から「Score.mdb」に変更する必要があります。(上記ソースコードであれば「Score.accdb」をコメントして「Score.mdb」のコメントを解除する事で変更できます)

全て準備が整ったら「DB接続.vbs」を実行してみてください。

メッセージボックスで各人の情報がひとりずつ表示され、最後に「終了」が表示されて終わります。

詳細解説

それではソースコードの中身について詳細の解説をしていきます。

設定の定数値

関数の最初には各設定用の定数値を記述しています。

定数値宣言
定数値設定

「FILE_NAME_DB」はAccessのDBファイルの名前です。

接続するDBの特定に使います。

「PROVIDER_ACCESS」はAccessのDBへ接続する方法です。

AccessのDBへ接続する場合にはこのProviderを使うためこういう物と覚えて問題ないです。

オブジェクトの生成

コメントで「オブジェクトの生成」と書いているブロックです。

オブジェクトの生成

FileSystemObjectは実行したVBScriptが格納されているフォルダを特定するために使います。

ADO接続はそのままAccessのDBファイルへの接続に使います。

「rsData」は削除し忘れのため無視してください。

情報収集

コメントで「情報収集」と書いているブロックです。

情報収集

AccessのDBへ接続するためにProviderとData Sourceの値が必要になるため、その組み立てを行っている部分です。

「FSO.GetFolder(“.”).Path」でVBScriptファイルが格納されているフォルダパスが取得できるのでその後ろにAccessのDBファイル名を付ける事でAccessのDBファイルパスを「Data Source」の値としています。(このため、VBScriptファイルと同じフォルダへの格納が必要になっています)

データベースへ接続

AccessのDBへ接続する準備が出来たので接続します。

データベースへ接続

今回の接続にはADO(ActiveX Data Objects)を使っています。

変数「adoConn」はADODB.Connection型で生成しており、DBへの操作をしてくれます。(VBScriptでは変数宣言で型指定はできないため全てVariant型になります)

変数の宣言

「.Open」にて指定のDBへ接続をしてくれます。

データを取得

DBへ接続できたのでデータを取得します。

データを取得

データの取得にはSQLを使って取得しました。

「SELECT * FROM tblScore;」は「tblScore」テーブル内のすべてのデータを抽出します。

「.Execute」はSQLを実行し、その結果を戻り値のRecordSetへ代入してくれます。

ソースコードではその中のデータをカンマ区切りでまとめた情報として「Msgbox」にてメッセージウィンドウで出力するようにしています。

RecordSetは使い終わったら「.Close」で閉じて「Nothing」を代入して開放しましょう。

データベースを閉じる(&解放(破棄))

不要となったデータベースは閉じて開放(破棄)します。

データベースを閉じる&解放(破棄)

「.Close」でDBへの接続を閉じ、「Nothing」を代入して開放しましょう。

まとめ

ExcelVBAマクロでやった内容をそのままVBScriptに移植しただけの内容でしたがどうでしたか?

これならAccessもExcelもOfficeソフトが入っていないPCでもDBを扱うプログラムを作ることができます。(VBScriptは別途開発環境を整えないとメモ帳などでは結構苦しいですが)

また、冒頭で言い訳をした件ですんなり動いた方と全然動かない方と居たんじゃないかな?と思います。

そこで全然動かない方は↓を試してみてください。

ショートカットを作成してリンク先を「C:\Windows\SysWOW64\wscript.exe [格納フォルダパス]\DB接続.vbs」にしてショートカットを実行してみてください。

これはADO接続を行うライブラリが「wscript.exe」に入っていて、OSが64bit環境の場合には互換性を重視した32bitバージョンと最新の64bitバージョンの2つが存在します。

この指定をせずに実行するとデフォルトの「C:\Windows\System32\wscript.exe」(最新の64bitバージョン)が実行され、古い技術のADOが正しく動かずエラーとなっている可能性があるためです。

ただし、この方法を使っても改善できない場合があるのでその場合はADO接続を諦める必要があるかもしれません。

ここら辺の完全な解決方法が分かるようなら、記事に追加します。

コメント

タイトルとURLをコピーしました