(※本件は一度マイクロソフト コミュニティで質問していますが、MSDNへの投稿を勧められたため再質問しています。)
MSコミュニティへのポスト → http://answers.microsoft.com/thread/57920932-4a12-454d-9dad-2289f43af7fa
■概要
現在、VBSで accdbファイルに接続するためにドライバー(Microsoft Access Driver (*.mdb, *.accdb))を指定しています。
最近まで利用できていたのに、ある時からこのドライバを使う段階で掲題のエラーを吐くようになりました。
これを回避、修復させる方法を探しています。
(ただし、スクリプト側の問題ではなく、ドライバやレジストリ等の問題と認識しています。)
■詳細
VBSからaccdbファイルへADO接続するため、次のコードを実行しています。
Set objCn = CreateObject("ADODB.Connection")
Set objRs = CreateObject("ADODB.Recordset")
objCn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" & strFilePath & ";"
すると、objCn.Openの行で次のエラーダイアログが連続して出ます。
Dialog_1
- Title: ODBC driver for Microsoft Access installation prob...
- Body: 「Unable to load odbcji32.dll」
Dialog_2
- Title: Windows Script Host
- Body:
「エラー: [Microsoft][ODBC Driver Manager] SQL_HANDLE_ENV でのドライバーの SQLAllocHandle は失敗しました。」
「コード: 80004005」
「ソース: Microsoft OLE DB Provider for ODBC Drivers」
Dialog_3
- Title: エラー
- Body: 「オペレーティング システムは現在このアプリケーションを実行するように構成されていません。」
今月の上旬頃はこの行でエラーは無かったのですが、ある時(朧気な記憶を辿ると、後述のドライバ更新日時2016/1/7以降かも)から上記のエラーが出るようになりました。
次に、ODBCのドライバが関係しているようなのでODBCデータソースアドミニストレーターを見てみました。
→ スタート > 管理ツール > データソース(ODBC)
「ドライバー」タブの一覧には↓これがあります。
- 名前:Microsoft Access Driver (*.mdb, *.accdb)
- バージョン:16.00.6326.1019
- ファイル:ACEODBC.DLL
- 更新日時:2016/01/07
因みに似た名前の「Microsoft Access Driver (*.mdb)」はファイルが「ODBCJT32.DLL」となっています。
(Dialog_1にあるODBCJ"I"32.DLLではありません)
そして「ユーザーDSN」タブでこの「Microsoft Access Driver (*.mdb, *.accdb)」を追加をしようとすると
先程と同じエラーダイアログが「Dialog_1」→「Dialog_1」→「Dialog_3」の順に連続で表示されます。
これらの事から、問題はVBS側ではなくドライバ周りがおかしい様に感じています。
ただ、エラーではACEODBC.DLLではなくodbcji32.dllが読み込めないと言っているので、
ドライバ自体が破損しているのかはよく分かりません。
■環境
Win7 pro 32bit
バンドルでoffice personal 2010が、追加でAccess2016がインストールされています。
ただしAccessは2010→2013→2016とバージョンアップしてきたものです。
ドライバは詳しくないので説明はこの辺りが限界ですが必要な情報があれば追記します。
どうか宜しくお願いします。
------------------------------
※後日追記
途中経過です。
下記サイトを参考に、Access2010用のコンポーネント(AccessDatabaseEngine.exe)をインストールし、ドライバを入れ直してみました。
- Microsoft Access(.mdb、.accdb)のODBC、OLEDBドライバーに関するまとめ
http://qlikview-training.ashisuto.co.jp/microsoft-access-odbc-oledb-driver/
- Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
http://www.microsoft.com/ja-jp/download/details.aspx?id=13255
するとエラーが生じなくなりました。
(Openメソッド=objCn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; が通ります。)
しかし当然ながら、Access2010用のドライバになっているのでACEODBC.DLLのバージョンも14になってしまいました。
今の所は支障ないのでいいですが、影響の範囲が分からないので、できればDLLはバージョン16で運用したいと漠然と思っています。
なお、ACEODBC.DLLのバージョンは次の手順で14から16に戻ります。
- コントロールパネルから「プログラムと機能」を起動。
- 一覧から「Microsoft Access 2016 - ja-jp」を選択し、クイック修復を実行する。
ただしVer.16に戻すとやはり同様のエラーが起きます。(VBSの実行時もユーザーDSNの登録時も)。
現在のACEODBC.DLLの場所:
C:\Program Files\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\ACEODBC.DLL
バージョン14でも問題無いでしょうか。あるいはDLLファイルに何か問題があるのでしょうか。