[pgsql-jp: 31992] Re: Access 2000からODBC 経由にてデータを転送した場合の問題

Kazumasa Gotoh kgotoh @ cic-kk.co.jp
2004年 1月 13日 (火) 15:13:00 JST


From: 岩瀬 肇 <iwase-h @ mxy.nes.nec.co.jp>
Date: Tue, 13 Jan 2004 14:29:46 +0900

> MS-Access2000からODBCドライバを利用してPostgreSQLへデータ転送を
> 行った場合、フィールド名に大文字と小文字の混在文字列があると
> ダブルクォートで囲わないと
> ERROR: Attribute 'foo' not found (PGError)
> などと表示されて正常にアクセスできません。
> 
> JAVAで利用しているのですが、プログラム側の変更は工数が大きいので
> できればODBCドライバの設定でなんとかならないかと試行錯誤してみた
> のですが、うまくいきませんでした。

「Java で利用している」という意味がよくわかりませんが、ODBC 云々は
関係なくて、最初に CREATE TABLE した時にテーブル名称やカラム名称を
ダブルクォートでくくる形で指定した事に諸悪の根元(?)があります。

まだテスト中であり本番ではないのであれば、いった DROP TABLE してから
CREATE TABLE し直しましょう。
または ALTER TABLE でもいけるのかな?

SQL の規格では、SQL 文自身は case insensitive であるとなっています。
しかし、CREATE TABLE 時にテーブル名称やカラム名称をダブルクォート
などでくくってしまうとパーサの都合上(だと私は理解していますが)、結果的に
問い合わせ SQL 発行時に、テーブル名称やカラム名称に対して case sensitive
になってしまいます。

Access からの利用時に Foo と指定しても上記のようなエラーになって
しまうのであるとすると、ひょっとすると PostgreSQL の ODBC ドライバが
小文字への変換を行っているのかも知れませんけれども、それ自身は SQL の
規格上から言えば何も問題ないでしょう。

個人的には、CREATE TABLE 時にテーブル名称やカラム名称を case sensitive
として扱うように作るのは、そもそもおかしいと思います。
しかし、何かの理由でそうせざるをえない事情があったのであれば、プログラム
作成時にテーブル名称とカラム名称を必ずダブルクォートでくくる必要が出て
くるのは当たり前ですので、そう書くしかないと考えます。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh @ cic-kk.co.jp



pgsql-jp メーリングリストの案内