Nanairo

プライベートを充実させてみたいものだ…。

64bit環境でvbsとProviderを使うときに注意すること

日本にいたとき、自分の会社のクライアント環境は64bitではなく32bitであった。
まあ、普通にOfficeを使っている分にはぜんぜん32bitでいいと思うのだけど、時代は64bit。
こちらに来てからは事務所の中すべてが64bitOSになっている。

64bitOSと32bitOSとの違いはいろいろあるけど、64bitではC:\Windowsのフォルダの中にsyswow64というフォルダがある。
このフォルダは32bitでしか動かないプログラムを64bitOS上で動かすために必要なものが入っているフォルダだ。

と、まあ、うんちくはこれまでにして、今日は一つ64bitOSと32bitOSの違いを学んだ。

Dim db
Dim rs
Dim cn
Dim obj

Set cn = WScript.Createobject("ADODB.Connection")
Set rs = WScript.CreateObject("ADODB.Recordset")
cn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=C:\test.accdb;"

set rs = cn.Execute("Select * from tblname")

msgbox(rs(1))

set rs = nothing
set cn = nothing

ちなみにソースはこちらを参考にした。
slowalpaca.hatenablog.com

このとき、Accessで作成されているmdbファイルやAccdbファイルにはProviderを使ってアクセスことが一般的だが、64bitOSでは「ドライバーがインストールされていない」と表示され、このままではデータベースファイル(*.mdb,*.accdb)を参照することが出来ない。
じゃあ、どうするかというとこんなショートカットを作成し、VBSが明示的に32bit環境で実行されるようにする。
c:\windows\system32\syswow64 c:\test.accdb
このようにすることで64bit環境でも、32bitOSのエミュレートによる恩恵を受けることが出来、Driverを使ったファイルへのアクセスも可能となる。
それにしても、この謎仕様はよく分からない…。