ODBC接続で 「ドライバーとアプリケーションとのアーキテクチャの不一致」 なエラーの解決法
64bit の Windows(借り物)において、ActivePerl(64bit) から ODBC 経由でデータベースにアクセスしようとしたところ、
failed: [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています
というエラーが発生してしまいました。Webでちょっと調べてみたところ、原因としては
64bit OS 環境で 32bit アプリケーションを起動し、ODBC を使ってデータベースなどにアクセスしようとするとタイトルのようなエラーが発生します。
これは管理ツールにある ODBC 接続のプログラムが 64bit 版であることに起因しているためです。23bit アプリケーションで ODBC を使うには 32bit 版の ODBC 接続から登録する必要があります。
» [ODBC] エラー:指定されたDSNには、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています おのでらの創作日記 in ソーサリーフォース より引用
だそうで、ドライバとアプリの環境のミスマッチを解消すれば何とかなりそうです。
それにしても、64bit の Windows ってば、ODBCの設定環境が64bit用と32bit用に分かれてるんですね。普通に [コントロールパネル] の [管理ツール] から [データソース(ODBC)] にアクセスすると、64bit用に登録されている設定は見えるけど、32bit用の設定は見えないんでよ。
というわけで、32bit用の設定は 「C:\Windows\Syswow64\odbcad32.exe」 を起動して、使おうとしている DSN の ODBCドライバが 32bit であることを確認することができました。
今回のパターンでは ODBCドライバーが32bit版で、繋ごうとする側が 64bit だったのがエラーの要因でしたので、ActivePerl(64bit) をアンインストールしてから ActivePerl(32bit) をインストールし直すことで回避することができました。
ホントは ODBCドライバを 64bit版に差し替えるのが、あるべき姿だとは思うのですが、すぐに見つけられなかったもので・・・orz
でも、今後のことを考えると、早いところ 64bit番の ODBCドライバーを手に入れておかなくちゃなぁ。
参照リンク
・» [ODBC] エラー:指定されたDSNには、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています おのでらの創作日記 in ソーサリーフォース