以外にはまったのでメモ。
現象
Oracle 9iが稼働しているサーバに対してWindows8(64bit)端末からAccess2007経由で
ODBC接続が行えない。
エラー内容
ODBC--呼び出しが失敗しました。
[Oracle][ODBC][Ora]ORA-12154: TNS: 指定された接続識別子を解決できませんでした。
(#12154)[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。(#0)[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。(#0)
試行錯誤
・根本的にODBCの設定がまちがってるんじゃね?
⇒64bitの場合、ODBCデータソースの作成は32bit、64bitで別になります。
Windows8の場合だと、コントロールパネルの管理ツールに2種類あります。
今回使用するのは32bit版です。
ここから設定を行いましたが、ODBCの設定、テストは問題なく行えました。
Access2007からは、上記のODBC設定を呼び出しているので、設定ミスはありません。
・OracleのODBCドライバ最新じゃないからじゃね?
⇒最新を入れても駄目でした。
・Oracleを複数インストールしてわけがわからなくなったんじゃね?
⇒たしかにOracle9i、10g、11gのクライアントをすべて突っ込んでました。
9iのクライアントはインストールに失敗(途中で処理が止まる)してました。
しかし、9iはレジストリ、ファイルはしっかり削除を行い、10gと11gはしっかり
住み分けできてるようなので原因ではなさそうでした。
と、ここまではおかしいところは見つかりませんでした。
何より、ODBC単体だと動作し、Access2007を通すと動かない、というのが腑に落ちませんでした。
次に試したのが結果的に原因、対策でした。
原因・対策
ODBC接続の設定には「括弧」などの記号が入ってはいけない、みたいのをどこかで
見たことがあります。
Windowsの64bitは、32bitのアプリケーションをインストールすると、「Program Files(x86)」に
入ります。正式に64bit版が存在しないOffice 2007も例外ではありません。
この括弧があやしいんじゃないか、と思い、試しにシンボリックリンクを作成、そこから実行
してみました。
シンボリックリンクの作成(コマンドプロンプトから管理者として実行)
mklink /d "C:\Program Files x86\Microsoft Office\Office12" "C:\Program Files(x86)\Microsoft Office\Office12"
正常に動作しました。原因は「括弧」のようです。
64bitWindoiwsの32bitアプリケーションのインストール先は、有無を言わさず上述している
フォルダになります。Officeのインストール時にインストール先を変更しても、
やはり仕様上、上述フォルダにいくようです。
もしかするともっとうまい解決策があるかもしれませんが、私はこの方法で回避できました。
まとめ
32bitのOffice(バージョン問わず)を64bitWindowsにインストールし、
ODBC接続でAccessからOracleに接続するとエラーとなる。
原因はOfficeのインストールパスであり、シンボリックリンクにより、
パスに記号が含まれないパスからAccessを実行することで回避可能。
やっぱりWindows8と64bitをまとめてテストするとどこに原因があるか判断しづらい……
※今回はこれが原因だったというだけで、すべてのエラーの解決を保証するものではありません。
シンボリックリンクの情報、助かりました。ありがとうございます!!
返信削除当方はOracle8、access2013、windows7 64bitです。
当方、ORACLE10G ACESS2007 windows8.1 64bitです。シンボリックリンクの作成(コマンドプロンプトから管理者として実行)を行うと、「指定されたパスが見つかりません」となってしまいます。
返信削除対処方法が分かりましたらご教授下さい
コマンドの意味を理解されてないようですので、1度調べてみることをお勧めします。
返信削除AccessがDドライブなど、デフォルト以外の場所にインストールされていると発生するエラーかと思いますので、インストール先に合わせて変更してみてください。
Oracle10g Access2007 Windows7 64bit環境
返信削除ODBC? Oracle Client? 途方にくれていたところ、シンボリックで解決しました。
ありがとうございました。
Oracle9+Windows7 64bit、Oracle11+Windows7 64bit環境にて
返信削除VBAでのADO接続(OraOLEDB,MSDADO)でも同様の現象でエラー有りました。
Program Files(x86)下のExcel.exeがあるパスに対してシンボリックでショートカットを作り、そこからExcelを起動すれば解決しました。大変助かりました。素晴らしい。