ユーザ用ツール

サイト用ツール


it技術:プロバイダoledb

プロバイダ OLEDB.4.0

概要

64bitのPCには、「Microsoft.Jet.OLEDB.4.0」が提供されていません。
MDBやExcelの操作をしようとした場合に下記エラーが発生します。
「'Microsoft.Jet.OLEDB.4.0' プロバイダはローカルのコンピュータに登録されていません。」

会社でMicrosoft Officeの「Microsoft Access 2010」がインストールされていても、それは32bit版となります。
32bit環境内なら「Microsoft.Jet.OLEDB.4.0」が使用できます。

対応

  • BATファイルは、32bit環境の「%windir%\SysWOW64\cmd.exe」を使用する。
  • VBSファイルは、32bit環境の「%windir%\SysWOW64\cscript」を使用する。
  • プロバイダを「Microsoft.ACE.OLEDB.12.0」に変更する。
  • .NETの場合、AnyCPUではなくx86でコンパイルする。

参照:Microsoft Access(.mdb、.accdb)のODBC、OLEDBドライバーに関するまとめ

プロバイダの変更

VBSなどにプロバイダの記述がある場合は下記のように書き換える。
“Provider=Microsoft.Jet.OLEDB.4.0;” → “Provider=Microsoft.ACE.OLEDB.12.0;”

Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントのインストールが必要。
※Microsoft.ACE.OLEDB.12.0は、32bit版と64bit版の両方が提供されます。
参照:http://www.microsoft.com/ja-jp/download/confirmation.aspx?id=13255

32bitOffice環境がインストールされている場合、すでにOffice32bitが入っているためインストーラーのチェックにひっかかり、インストールが中止されてしまいます。
(Officeは32bitと64bitのサイドバイサイドインストールはできません。)
その場合、「Microsoft Access Database Engine 2016 Redistributable」をダウンロードして、コマンドプロンプト上にて quietモードでインストールを実行する。

AccessDatabaseEngine_x64.exe /quiet

プロバイダとAccesssバージョン

  • Microsoft.ACE.OLEDB.12.0(Access2007,Access2010)
  • Microsoft.ACE.OLEDB.15.0(Access2013)
  • Microsoft.ACE.OLEDB.16.0(Access2016)

※Access2013は Microsoft.ACE.OLEDB.12.0 として呼び出すと例外吐くようなので、15.0として呼び出すか、上のコンポーネントを入れます。2016は12.0 or 16.0どちらでも。
参照:ADO.NETでExcelファイルに接続する

.NETのx86への変更

ソースリストがあればx86でコンパイルし直せばいいが、実行ファイルしか存在しない場合は下記ツールを使用する。
.NETアプリのAnyCPUを32bitに変換するツール「CorFlags 変換ツール (CorFlags.exe)
参照:アセンブリーの対応CPU(X86, X64)を確認

使用方法

corflags [.NETの実行ファイル(exe)のパス] /32BIT+

確認方法

corflags [.NETの実行ファイル(exe)のパス]
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 1
Signed : 0 

※32BITに1が立つのを確認。ファイルの更新日は変更されない

it技術/プロバイダoledb.txt · 最終更新: 2018/06/18 22:04 by yajuadmin