DB

Access「ODBC–呼び出しが失敗しました。」の対処方法

今日はAccessを使っていたハマった話。
ぼくはシステムの保守作業で、Accessをよく使います。

ある日、PostgreSQLのテーブルをODBC経由でリンクテーブルを作成して、Accessで開こうとすると下記のようなエラーが発生しました。
リンクテーブルを開くとODBC接続エラー

ODBC--呼び出しが失敗しました。

Could not send Query(connection dead);
Could not send Query(connection dead)(#26)

結論を先にいうと、PostgreSQLのバージョンが古い場合の、ODBCドライバーの指定が悪かったのです。


エラーの詳細

「ODBC–呼び出しが失敗しました。」自体はよく出るメッセージで原因は多岐にわたります。このメッセージだけでの原因特定は難しいかもしれません。

今回の現象としては、

  • 接続はできている
  • 列情報は表示できる
  • レコード数も合ってる
  • 値がすべて「#Name?」となる

こんな感じです。
エラーでもテーブル情報を取れてる

値が表示できていないだけっぽいので、文字コード?そんな指定あったっけ?


原因と対処方法

Accessでリンクテーブルを作る際の設定を探してみましが、結局見つからず。
原因はODBCの設定でした。

上記エラーになった設定はコチラ↓
エラーになったODBCドライバー
「PostgreSQL ANSI」です。本体のPostgreSQLの文字コードがEUC-JPとなっているため、このドライバーを指定していました。

それを「PostgreSQL」で接続を作り直します。
現象が直ったODBCドライバー
その後、Access側で再度、リンクテーブルを作成すると今度は無事に表示されました。

このドライバーは、PosgreSQLのバージョンとのマッピングがあるっぽくて、古いPostgreSQLには古いドライバーを使えってことなのでしょうか。ぼくの環境では下記のドライバー指定でうまくいきました。
(※PostgreSQLのエンコードはすべてEUC-JPです)

  • PostgreSQL 8.1.0 「PostgreSQL」
  • PostgreSQL 9.1.1 「PostgreSQL ANSI」
  • PostgreSQL 10.5 「PostgreSQL ANSI」

以上、備忘録でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です