Windows7,8,10 64bit OS環境下でAccess 32bitのODBC(Oracle Client 8,9,10g 32bit)接続ができない原因と対処法・解決策のメモです。
実はこの問題にぶち当たったときに、グーグル先生にいろいろなキーワードで聞いてみましたが、原因と解決策について完璧にヒットする記事はみつかりませんでした。
- tnsnames.oraの設定に誤りはないか?
- ODBC データ ソース (64 ビット)ではなく、ODBC データ ソース (32 ビット)に登録しているか?
なんて記事は見かけましたが、基本的な設定に問題はないのに、接続できないのです。
ということで、同じ現象で悩んでいる方のために、対処法を紹介します。
クリックできる目次
AccessでOracleにODBC接続できない状況詳細
- 32bitOS環境では接続できるが、64bitOS環境では接続できない
- ODBC データ ソース (32 ビット)上での接続テストはOK(tnsnames.oraなどの設定に問題なし)
- AccessからODBCを使ってOracleテーブルに接続を試みるとエラー表示
この段階ではAccessに原因があるのか、OracleClient側に問題があるのか切り分けできず。
AccessでOracleにODBC接続時のエラー表示内容
[Oracle][ODBC][Ora]ORA-12154: TNS: 指定された接続識別子を解決できませんでした。
[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。
Access上でODBC データ ソース (32 ビット)から適切なデータソースを選択し、Oracleに接続しようとすると、エラーが発生します。
AccessでOracleにODBC接続できない原因
Oracle Client 10g 32bit driverが64bitOSに対応できていないため、呼び出し元(Access実行ファイル)のフルパスに”()”が入っているとエラーが発生します。
64bitOS:Program Files (x86) ←パスに()が含まれるとエラー
Accessのインストール先を()が入らない場所に指定することを試みましたが、どうもMicrosoftさんは、これができない仕様にしているようです。
では、どうすればよいのか?
AccessでOracleにODBC接続できないときの対処法
② ①ができない場合は、()を含まないシンボリックリンクを作成する
Oracle Client 11g 32bit以降のバージョンは、Access実行ファイルのフルパスに”()”が入っていても、エラーになりません。ただし、10gと11gは完全に互換性があるわけではありませんので、検証が必要です。ちなみに私が使用しているAccess数十種類はすべて正常動作しました。
11gに移行できない場合は、シンボリックリンクを作成することになります。例えば、コマンドプロンプトを管理者権限で起動して、以下を実行します。
すると、Cドライブの直下に以下のようにフォルダが生成されます。
Program Files x86下のAccessを起動して、ODBC接続をすれば、エラーは発生しません。
Windows10でOracleにAccessのODBC接続まとめ
今回は、Windows7 32bitからWindows10 64bitへのアップグレード検証にて発覚した問題でした。そもそも今どきOracle Client 10g 32bit以下のバージョンは使用されていないかもしれませんが、少しでも誰かのお役に立てれば幸いです。
その他のAccess関連おすすめ記事はこちら
3 件のコメント
本当に助かりました!ACCESSだと繋がらずに途方に暮れていました。
シンボリックリンク経由で無事動いています。
ありがとうございました。
大変有用な情報ありがとうございます。
環境変数PATHにてOracleInstantClientのパスをシンボリック経由で指定することで問題解決できました。
tamさん、コメントありがとうございます!お役に立てたようで何よりです。また具体的な解決情報の書き込みありがとうございます。