Windows10(64bit)でAccessのODBC接続ができない原因と対処法・解決策

Windows7,8,10 64bit OS環境下でAccess 32bitのODBC(Oracle Client 8,9,10g 32bit)接続ができない原因と対処法・解決策のメモ。

実はこの問題にぶち当たったときに、グーグル先生にいろいろなキーワードで聞いてみましたが、原因と解決策について完璧にヒットする記事はみつかりませんでした。

  • tnsnames.oraの設定に誤りはないか?
  • ODBC データ ソース (64 ビット)ではなく、ODBC データ ソース (32 ビット)に登録しているか?

なんて記事は見かけましたが、基本的な設定に問題はないのに、接続できないのです。
ということで、同じ現象で悩んでいる方のために、解決策をメモします。

スポンサーリンク

状況とエラー内容

状況

  • 32bitOS環境では接続できるが、64bitOS環境では接続できない
  • ODBC データ ソース (32 ビット)上での接続テストはOK(tnsnames.oraなどの設定に問題なし)
  • AccessからODBCを使ってOracleテーブルに接続を試みるとエラー表示

この段階ではAccessに原因があるのか、OracleClient側に問題があるのか切り分けできず。

エラー表示内容

ODBC–呼び出しが失敗しました。
[Oracle][ODBC][Ora]ORA-12154: TNS: 指定された接続識別子を解決できませんでした。
[Microsoft][ODBC Driver Manager] ドライバーのSQLSetConnectAttrは失敗しました。

Access上でODBC データ ソース (32 ビット)から適切なデータソースを選択し、Oracleに接続しようとすると、エラーが発生します。

原因と対処法・解決策

原因

Oracle Client 10g 32bit driverが64bitOSに対応できていないため、呼び出し元(Access実行ファイル)のフルパスに”()”が入っているとエラーが発生します。

32bitOS:Program Files
64bitOS:Program Files (x86) ←パスに()が含まれるとエラー

Accessのインストール先を()が入らない場所に指定することを試みましたが、どうもMicrosoftさんは、これができない仕様にしているようです。

では、どうすればよいのか?

対処法・解決策

① Oracle Client 11g 32bit 以降にバージョンアップする
② ①ができない場合は、()を含まないシンボリックリンクを作成する

Oracle Client 11g 32bit以降のバージョンは、Access実行ファイルのフルパスに”()”が入っていても、エラーになりません。ただし、10gと11gは完全に互換性があるわけではありませんので、検証が必要です。ちなみに私が使用しているAccess数十種類はすべて正常動作しました。

11gに移行できない場合は、シンボリックリンクを作成することになります。例えば、コマンドプロンプトを管理者権限で起動して、以下を実行します。

mklink /d “C:\Program Files x86” “C:\Program Files (x86)”

すると、Cドライブの直下に以下のようにフォルダが生成されます。

Program Files x86下のAccessを起動して、ODBC接続をすれば、エラーは発生しません。

おわりに

今回は、Windows7 32bitからWindows10 64bitへのアップグレード検証にて発覚した問題でした。そもそも今どきOracle Client 10g 32bit以下のバージョンは使用されていないかもしれませんが、少しでも誰かのお役に立てれば幸いです。

その他のAccess関連記事

AccessのOraclODBC接続で「SQL_HANDLE_ENVでのドライバのSQLAllocHandleは失敗しました。」と表示される場合の対処法・解決策

AccessからSQL Serverへのリンクで「#Deleted」と表示される場合の対処法・解決策

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. tam より:

    大変有用な情報ありがとうございます。
    環境変数PATHにてOracleInstantClientのパスをシンボリック経由で指定することで問題解決できました。

    • えいじまん より:

      tamさん、コメントありがとうございます!お役に立てたようで何よりです。また具体的な解決情報の書き込みありがとうございます。