treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Windowsが64ビットならODBC設定はコンパネではない話

今日はOSのビット数によって本来コントロールパネルに表示されるはずの設定画面が表示されない、という動作についてご報告します。
簡単に言えばODBCの設定画面です。

64ビットOSでのODBCプロパティ

例えばWindows7の64ビットエディションがあるとします。
でそのWindowsには32ビット版のOfficeがインストールされています。
よくある64ビットOSに32ビットOfficeを利用する構成になっています。

この構成にmysql-connector-odbcなんかをインストールしてODBCセットアップをしなきゃいけない、としたときの話です。

通常は…

普通はコントロールパネルを開いて「管理ツール」を開く、その中に、「データソース(ODBC)」とあるショートカットをダブルクリックして起動します。
図:コントロールパネル「管理ツール」

f:id:treedown:20161214235604p:plain

この「データソース(ODBC)」を起動するわけです。
そうするとこんな画面が開きます。
図:ODBCデータソースアドミニストレータ画面

f:id:treedown:20161214235615p:plain

例えば、ここの「MS Access Database」をダブルクリックしてプロパティ画面を起動するのですが、64ビットOSの32ビットOfficeを使っている環境だと、こんな画面になってしまいます。
図:エラー画面

f:id:treedown:20161214235628p:plain

----------------------------------------------
---------------------------
Microsoft ODBC アドミニストレーター
---------------------------
システム エラー コード 126: 指定されたモジュールが見つかりません。 (C:\PROGRA~1\COMMON~1\MICROS~1\OFFICE14\ACEODBC.DLL) のために、Microsoft Access Driver (*.mdb, *.accdb) ODBC ドライバーのセットアップ プログラムを読み込むことができません。
---------------------------
OK
---------------------------
----------------------------------------------
続いてこんな画面が表示されます。
図:エラー画面2

f:id:treedown:20161214235640p:plain

----------------------------------------------
---------------------------
ドライバーの ConfigDSN、ConfigDriver、または ConfigTranslator が失敗しました。
---------------------------
検出されたエラー:

システム エラー コード 126: 指定されたモジュールが見つかりません。 (C:\PROGRA~1\COMMON~1\MICROS~1\OFFICE14\ACEODBC.DLL) のために、Microsoft Access Driver (*.mdb, *.accdb) ODBC ドライバーのセットアップ プログラムを読み込むことができません。
---------------------------
OK
---------------------------
----------------------------------------------

「ODBC ドライバーのセットアップ プログラムを読み込むことができません。」
とメッセージがあるのですが、確かにODBCドライバはセットアップ済みなので起動できないというのはおかしいのです。

このときはどうするのか

結論から言うと、64ビットOSのODBCデータソースはもう一つの起動ファイルから起動します。
そのファイルの格納先が
「C:\Windows\SysWOW64\odbcad32.exe」
です。
図:SysWOW64フォルダ内のファイル

f:id:treedown:20161214235708p:plain

このodbcad32.exeを起動すると、コントロールパネルの管理ツールから起動したODBCプロパティ画面と同じ画面が開きます。

図:ODBCデータソースアドミニストレータ画面2

f:id:treedown:20161214235805p:plain

全く同じ画面に見えますが、こっちから起動するとエラーは表示されず正常に動作します。
試しに「MS Access Database」をダブルクリックすると…
図:ODBC Microsoft Accessセットアップ画面

f:id:treedown:20161214235815p:plain

エラーメッセージは表示されずセットアップ画面が表示されます。これでセットアップ・設定を実施することができます。

つまり?

おそらく、ですが。
64ビットOSにおいてはSysWoW64によってエミュレーションしている32ビットアプリケーションたるodbcad32.exeを起動する必要がある、ということです。つまりコントロールパネルに表示されているのはそのOSのデータソース(ODBC)をセットアップする画面(UI)が表示されるのであってOfficeは32ビットだとかそれに伴ってmysql-connector-odbcもx86側をインストールしているとかいうのはOSにとってはあずかり知らぬこと、ということですね。おそらく。

なので64ビットOSにmysql-connector-odbc-x86.exeをインストールした場合には、コントロールパネルにある「データソース(ODBC)」を起動するのではなく、「C:\Windows\SysWOW64\odbcad32.exe」を起動して設定を実行します。

忘れっぽい未来の自分向けに覚えておくようにします。