VBScriptさんま屋.

VBScriptの個人的なメモです (´・ω・`)

Access形式データベースへの接続(1)OLEDBプロバイダー

概要

データベースへ接続するための事前準備として、利用可能なOLEDBプロバイダーを確認する。

OLEDBプロバイダーを確認する

PowerShellを起動して以下のコマンドを実行する。

(New-Object data.oledb.oledbenumerator).getElements() | select SOURCES_NAME, SOURCES_DESCRIPTION

64bit版のOLEDBが表示される。必要な行だけ示す。

SOURCES_NAME               SOURCES_DESCRIPTION
------------               -------------------
Microsoft.ACE.OLEDB.12.0   Microsoft Office 12.0 Access Database Engine OLE DB Provider
Microsoft.ACE.OLEDB.16.0   Microsoft Office 16.0 Access Database Engine OLE DB Provider

つぎに32bit版PowerShellを起動して同じコマンドを実行する。32bit版PowerShellはC:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exeにある。

32bit版のOLEDBが表示される. 必要な行だけ示す。

SOURCES_NAME               SOURCES_DESCRIPTION
------------               -------------------
Microsoft.Jet.OLEDB.4.0    Microsoft Jet 4.0 OLE DB Provider

以上から自分の環境では

  • 64bit版のMicrosoft.ACE.OLEDB.12.0
  • 64bit版のMicrosoft.ACE.OLEDB.16.0
  • 32bit版のMicrosoft.Jet.OLEDB.4.0

が利用できることが分かる。

VBScriptを動かしているWSHにも32bit版と64bit版がある。

64bit版WindowsではスクリプトをWクリックしたとき、とくに設定を変えてなければ64bit版が起動する。
作業フォルダにtest.vbsがあるとして、ターミナルから以下のように実行したときも64bit版が起動する。

C:\Windows\System32\wscript.exe .\test.vbs

以下のように実行したときは32bit版が起動する。

C:\Windows\SysWOW64\wscript.exe .\test.vbs

32bit版を起動するのにコマンドを打つのが面倒な場合は、下記のスクリプトにドラッグ&ドロップすると良い。

'このスクリプトファイルにドラッグ&ドロップしたスクリプトファイルを32bit版のWSHで実行する

Dim shell, path

'1ファイルをドラッグ&ドロップしたとき以外は終了
If WScript.Arguments.Count <> 1 Then WScript.Quit

'ドラッグ&ドロップしたスクリプトファイルのパス
path = WScript.Arguments(0)

'WshShellオブジェクト
Set shell = CreateObject("WScript.Shell")

'作業フォルダとしてpathの親フォルダを指定
shell.CurrentDirectory = CreateObject("Scripting.FileSystemObject").GetParentFolderName(path)

'32bit版WSHでスクリプトを実行する
shell.Run "C:\windows\SysWOW64\wscript.exe """ & path & """"