はじめに
最近は、Windows 10 PCを購入すると64bitになっています。プリインストール版のOfficeも64bitです。
Windows 10 のバージョン2004からは、OEM用にて32bitが提供されなくなります。
https://docs.microsoft.com/en-us/windows-hardware/design/minimum/minimum-hardware-requirements-overview#31-processor
企業では使用アプリケーションやExcelのマクロやVBAなどの動作も考慮して、Windows 10 64bit版でもOffice 32bit版がインスールされていることが多いです。
下記サイトでは、Microsoftの推奨値を記載しています。
Microsoft Officeにて32bit、64bitどちらを使うか問題
Office 365・2019では64bitが推奨値、Office 2016、2010、2013では32bitが推奨値です。
この記事は、Visual Basic Advent Calendar 2020の13日目の記事となります。11月22日に先行記事として書きました。Visual Basicでは記事が少ないので、今年書いた記事ならOKにしています。
Microsoft.ACE.OLEDB
64bit版Windowsには「Microsoft.Jet.OLEDB.4.0」が提供されていません。MDBやExcelの操作をしようとした場合に「'Microsoft.Jet.OLEDB.4.0' プロバイダはローカルのコンピュータに登録されていません。」のエラーが発生します。
64bit版Windowsでの「Microsoft.Jet.OLEDB.4.0」について
その場合、「Microsoft.ACE.OLEDB.XX.0」に切り替えるなどの対応が必要になります。「Microsoft.ACE.OLEDB」は64bitと32bitの両方が提供されていますし、下記表のようにサポートするファイルが多くなります。
Engine | dBase | Access | Text | Excel |
---|---|---|---|---|
Jet | .dbf | .mdb | .txt .csv |
.xls |
Ace | .dbf .ndx .mdx |
.mdb .accdb |
.txt .csv |
.xls .xlsx .xlsm .xlsb |
OLEDBプロバイダの一覧取得
.NETにはOLEDBの一覧を取得するライブラリがあるので、これをPowerShellから呼べば一覧が取得できる。
powershell.exe
PS > (New-Object data.oledb.oledbenumerator).getElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
PS > (New-Object data.oledb.oledbenumerator).getElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
接続文字列
- Microsoft ACE OLEDB 12.0 connection strings
- Excel2010以降をJetデータベースを使うには
- VB.NETでOleDBを使ったエクセルファイルへのアクセス
- C#でデータベースへ接続する(Microsoft Access編)
ACEプロバイダと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ファイルに接続する
マイクロソフトでは13という数字は忌み番のため内部バージョンはスキップされる。
13と色にまつわる話
ACEのインストール
「Microsoft.ACE.OLEDB.XX.0」は、Windowsインストーラー形式(MSI)のOfficeをインストールすれば利用できるようになります。
それ以外の方法では、「Microsoft Access データベース エンジン 再頒布可能コンポーネント」などで別途インストールする必要があります。
- 「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」のダウンロード
- 「Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント」のダウンロード(英語版のみ)
Accessランタイムのインスールでも可能です。
- Microsoft Access 2013 Runtimeのダウンロード
- Microsoft Access 2016 Runtimeのダウンロード
- Microsoft 365 Access ランタイムをダウンロードしてインストールする
クイック実行形式のOfficeの場合
クイック実行形式は Office 2013から採用され、Office 365(Office 2019)ではクイック実行形式のみがリリースされました。
クイック実行形式の Office 製品をインストールした際に、 Office に付属している ODBC ドライバや OLEDB に関するファイルやレジストリ情報が Windows インストーラー形式をインストールした時とは異なる形で登録されます。
64bit MS-Access 2019をインストールしているのに、SQL-ServerでACE.OLEDB.12.0が使えないピンチ!!
クイック実行形式の Office をインストールすると ODBC/OLEDB が利用できないので、「Microsoft Access データベース エンジン 再頒布可能コンポーネント」などで別途インストールが必要となります。
ACEの32/64ビットの共存
Officeは32bitと64bitのサイドバイサイドインストール(共存)はできませんが、「Microsoft Access データベース エンジン」は32/64ビットの共存は可能です。
64bit版がインストール済みの場合
「Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント」の32bit版をダウンロード(英語版のみ)して、コマンドプロンプト上で「/quit」コマンドを使用してインストールします。
AccessDatabaseEngine.exe /quiet
32bit版がインストール済みの場合
「Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント」の64bit版をダウンロード(英語版のみ)して、コマンドプロンプト上で「/quit」コマンドを使用してインストールします。
AccessDatabaseEngine_x64.exe /quiet
もし、これでダメなら下記の方法を試して見てください。
- Microsoft Acces Database Engine 2016 の32bit/64bit版の共存方法
- Microsoft Access Database Engine 2016 Redistributable won't install due to 64-bit component.
AccessDatabaseEngine_X64.exeからaceredist.msiを抽出し、aceredist.msiを実行します。
AccessDatabaseEngine_X64.exe / extract:c:\ adbe2016_x64
msiexec /ic:\adbe2016_x64\aceredist.msi/passive
MSIコマンド | コマンドの説明 |
---|---|
quiet | サイレント・モード、ユーザーとの対話はない |
passive | 無人モード - 進行状況バーのみ表示 |
Micosoft Access起動時にエラー
Office 32bit版で、AccessDatabaseEngine 64bitをインストールしました。
Micosoft Accessを起動した際に下記のエラーが出るようになりました。そのため、AccessDatabaseEngine 64bitをアンインストールして見るとこのエラーは出なくなりました。
Micosoft Accessを使わないならいいかも知れませんが、ユーザーに迷惑がかかりますね。
Officeの共存
Officeでは同じ内部バージョンでは共存はできないが、別内部バージョンなら制限はないです。
別内部バージョンでもクイック実行形式では共存できない。
例としてOffice 365の64bitとOffice 2010の32bitは共存可能。
Office 365の64bitに、Access 2010 Runtimeの32bitはインスールすることができる。
Office リリース | バージョン | インストール テクノロジ |
---|---|---|
Office 365(Office 2019) | 16.0 | クイック実行 |
Office 2016 | 16.0 | クイック実行 |
Office 2013 | 15.0 | クイック実行 Windows インストーラー (MSI) |
Office 2010 | 14.0 | Windows インストーラー (MSI) |
- Can Access 2013 Runtime 32bit coexist with Office 64bit
- 同一コンピューター上に異なるバージョンの Office、Project、Visio をインストールするためのサポート対象シナリオ
インストールエラー 1935
Microsoft Access database engine 2010をインストールしたら、下記のエラーが出てインストールできませんでした。
原因
イベントログビューアを参照すると、「Microsoft.VC90.CRT」のコミットエラーのようです。
製品: Microsoft Access database engine 2010 (Japanese) -- エラー 1935. アセンブリ コンポーネント {9DA4DC8A-9731-3F0E-8BD5-FC17CA6848AD} のインストール中にエラーが発生しました。HRESULT: 0x80073712。アセンブリ インターフェイス: IAssemblyCacheItem、関数: Commit、アセンブリ名: Microsoft.VC90.CRT,version="9.0.30729.4148",publicKeyToken="1fc8b3b9a1e18e3b",processorArchitecture="x86",type="win32"
対応
下記の方法を試してみましたが、いずれも解決にいたりませんでした。
- Error 1935 - An error occured during the installation of assembly component...
- Windows10のOfficeインストールエラー1935(0x80131049)の対処法・解決策
- インストールのトラブル解決!③ - 「エラー1935」
最終対応
Microsoft Access データベース エンジン 2016 再頒布可能コンポーネントならインストールすることが出来ました。
https://www.microsoft.com/ja-JP/download/details.aspx?id=54920
PS>(New-Object data.oledb.oledbenumerator).getElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
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
Microsoft.ACE.OLEDB.12.0 と Microsoft.ACE.OLEDB.16.0 のドライバーが両方ともインストールされますので、接続文字列を変更しなくても、Access 2010と同じ「Microsoft.ACE.OLEDB.12.0」がそのまま使用できます。
理屈上はプログラムの変更もなく、簡易的な検証で済むはずです。
最後に
新しくアプリケーションを作るならローカルDBとしてmdbやaccdbとか使用しないで「sqlite」を使用します。Excelファイルを読むにしてもEPPlusやNPOIやClosedXmlを使用します。
昔に作ったアプリケーションの改善作業というしがらみがあって、「Microsoft.ACE.OLEDB」を使うみたいなことになるんでよね。