Office2013/2016をDAブラックホール1.7のデータベースエンジンに使えるか

今週、Office365のオフラインインストール環境で、「外部データ連結」を介したxls/xlsxへの書き戻しに不具合が生じるという報告があった。

事象の概要

Office365のオフラインインストール環境(2013か2016かクイック実行形式かは不明)にインストールしたDAブラックホール1.7で、
「外部データ連結」を介したxls/xlsxの「読み取り」はできるし解析結果も表示されるけど「書き戻し」だけが反映されないにという不具合報告であった。

ふむ、2010に対する完全な後方互換ではないかもしれないねぇ → 2013/2016

そもそも Office 2013/2016 をクイック実行でインストールした環境では、ODBCドライバーが入っていないという問題があって。このことから、Office 2013/2016 は ODBC ドライバや OLEDBコンポーネントを自身では使っていない可能性が示唆されていたんだよね。
すなわち後方互換性のために、ODBC ドライバや OLEDBコンポーネントをパッケージしているにすぎないのではないか、という印象を持った。

ベンダーがこのあたりを使ってないなら、もしODBCやOLEDB周辺に潜在的な問題があったとしても、ベンダー側に認知されにくいのではないかと思ったのだわ。

DAブラックホールでは

DAブラックホール1.7は、どのバージョンのデータベースエンジンであっても「動けばそれでよい」という思想に基づいて、実装している。

プログラムでは、起動時に
dablack.accdb (DAブラックホールの解析結果保存ファイル)

Provider=Microsoft.ACE.OLEDB.12.0 (Microsoft ACE OLEDB)
で開き、
そこでエラーがスローされれば、必要な Office System Driver が入っていないと判断して、

データベースエンジンのインストールを求める表示(これは32bit環境のもの)

を表示する。

インストールメディアに同梱されている、AccessDatabaseEngine.exe は、Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントの32bit版と同じものであり、通常はこれをインストールすることでDAブラックホール1.7が使用可能になる。
(※64bit環境では他の選択肢があることがサジェッションされる)

逆に言えば、Microsoft ACE OLEDB が使用できる状況であれば、DAブラックホール1.7はなんら案内を行うことなく起動する。データベースのバージョンは問わない。

このため、後方互換(上位互換)のデータベースエンジンが入っているときも、特に警告は出さないので、そのエンジンに問題があったとしても、ユーザーは気が付きにくいかもしれない。

データベースエンジン対応表

DAブラックホール1.7は Microsoft ACE OLEDB を使用するので、基本的には Office 2010 またはそのエンジンを用いるのが最もよい。

ただし環境や将来設計によって、32bitと64bitを使い分ける判断が必要になることもあるので、以下に対応表を示す。

 

環境条件 Windows 10,8,7,
Vista SP1,XP SP3
Windows Vista, XP SP2
MS Office2007/2010 をインストールしている 追加エンジン不要 追加エンジン不要
MS
Office2007/2010
のいずれもイン
ストールしてい
ない
OS は 32bit 2010 Office system ドライバ
AccessDatabaseEngine.exe
2007 Office system ドライバ
AccessDatabaseEngine.exe
OS は 64bit 2010 Office system ドライバ
AccessDatabaseEngine.exe
または
AccessDatabaseEngine_X64.
exe
2007/2010 以外
の Office をイン
ストールしてい
る ( またはその予
定がある )
32bit 版 2010 Office system ドライバ
AccessDatabaseEngine.exe
64bit 版 2010 Office system ドライバ
AccessDatabaseEngine_X64.
exe

赤字はメディアに同梱しているデータベースエンジン

Office 2013/2016で、もし問題が生じた場合は、Office 2010またはそのエンジン(2010 Office system ドライバ)をインストールする、という順序でもいいのではないかと思う。