@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

PostgreSQLを用いてデータベースプログラミング

1
投稿者投稿内容
闘魂
会議室デビュー日: 2004/03/03
投稿数: 10
投稿日時: 2004-03-04 09:05
始めて投稿させて頂きます。
よろしくお願いします。

プラットフォームはVB.NET Enterprise Developerです。
LinuxサーバにてPostgreSQLデータベースを構築し、クライアントPC(Win2k)にODBC接続させました。
VB.NETにてデータベースプログラミングしようと思い、まずOdbcDataAdapterを用いてデータアダプターの構成を試みたのですが、「インデックスが配列の境界外です。」と表示され、うまく構成できません。
Access2000にリンクさせ、OledbDataAdapterからデータアダプターの構成を試みると、正常に構成できます。

何か設定に問題でも、あるのでしょうか?

たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-03-05 10:45
エラーメッセージを読んだ限りでは、設定というよりはプログラム自体に問題がありそうですね。ソースリストを書き込まれると適切なアドバイスを受けることができると思いますよ。
闘魂
会議室デビュー日: 2004/03/03
投稿数: 10
投稿日時: 2004-03-05 11:45
直接コードを書いて、データを接続していません。
わかりにくいでしょうが、勘弁して下さい。

以下の手順で接続を試みました。
 
1.サーバー(RedHat8 PgSQl Ver7.2.2)にてテーブルの作成・・・OK
2.クライアントPC(Win 2K)にてODBCデータソースの設定・・・OK
3.VB.NETのサーバーエクスプローラー上で、データ接続の確立・・・OK
4.ツールボックスOdbcDataAdapterをフォームに貼り付け、データアダプター構成ウィザードの設定を行う・・・NG
この時、ウィザードの結果表示の所で、表示されるエラーが、「インデックスが配列の境界外です。」となります。

*このデータをAccessにリンクさせ、フォームにOleDbのJETで接続すると問題ないのにOdbcでダメなのが納得いきなせん。


たじ
会議室デビュー日: 2004/03/10
投稿数: 2
投稿日時: 2004-03-10 13:33
実は、私もまったく同じ現象に悩まされました。
10日ほど前です。丸一日はまってました。
Access2002からは問題ないのに、VS.NET2003からは失敗します。

結論から言うと、
「MS提供のODBC用データプロバイダは、
 与えられたSQL文中の大文字を小文字に変換してしまう」
でした。

PostgreSQL上のテーブル名とフィールド名をすべて小文字に
統一すると上手くいきます。試してみてください。

困り果てて、コードのみで直接アクセスを試みたところ、
SQL文と「指定されたテーブルが存在しない」がエラーで
表示されましたが、そこに示されたSQL文は、小文字への
置換がされていました・・・

これって、仕様として問題な気がする・・・
闘魂
会議室デビュー日: 2004/03/03
投稿数: 10
投稿日時: 2004-03-10 13:51
たじさんはPostgresのデータを小文字に直して、接続できたみたいですが、接続の過程はどうようなものでしょうか?
私はDBを小文字で構成しているので、その辺も気になります。

冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2004-03-10 13:59
引用:

結論から言うと、
「MS提供のODBC用データプロバイダは、
 与えられたSQL文中の大文字を小文字に変換してしまう」
でした。


気になったので、少し調べてみましたが(sql 大文字と小文字の区別 で検索)
そもそもデータベースによって、大文字と小文字の区別をしてたりしてなかったりするみたいです。
「大文字を小文字に変換」するという仕様は、ここらへんの事情があるのではないでしょうか?
(本当は、SQLの仕様か、ODBC規格まで調べると何か詳しい事がわかるのかもしれませんが)

ちなみに、Postgresでは大文字、小文字の区別はするので、
解決策として、データベース名、フィールド名は、全てクォートするようにしてます。
(select "hoge1", "hoge2" from "hoge_table"; ってな風に)
編集---
意味が通らなかったので編集

[ メッセージ編集済み 編集者: 冬寂 編集日時 2004-03-10 14:24 ]
闘魂
会議室デビュー日: 2004/03/03
投稿数: 10
投稿日時: 2004-03-10 16:01
ちなみにPostgreSQLのODBCドライバを変更したら、うまく接続できました。
PostgreSQLをDBとして使用する場合には、小文字入力、ODBCドライバを最新版にUPする事が大事なようですね。
たじ
会議室デビュー日: 2004/03/10
投稿数: 2
投稿日時: 2004-03-10 17:35
闘魂さんは無事に解決されたのですね。
psqlODBCの選定には私も悩みました。
7.03.0208を最終的には使用しています。

引用:

ちなみに、Postgresでは大文字、小文字の区別はするので、
解決策として、データベース名、フィールド名は、全てクォートするようにしてます。
(select "hoge1", "hoge2" from "hoge_table"; ってな風に)



気づきませんでした。>冬寂さん
フィールド名とかにスペースなどがないかぎり、クォートを使うことは頭に
ありませんでした。反省です。
1

スキルアップ/キャリアアップ(JOB@IT)