[pgsql-jp: 32012] AccessからPostgreSQL へ (boolean型への検索)

西尾大助 d-nishio @ ta2.so-net.ne.jp
2004年 1月 14日 (水) 10:17:46 JST


西尾と申します。初めて投稿させて頂きます。

PostgreSQLをサーバに、MS-Accessをフロントエンドにしたシステム構築を
試みています。
(技量は素人から毛が抜けた程度のレベルです。)
トラブルに遭遇しましたのでお知恵を拝借したいと思い、
投稿する次第です。

詳細は下記の通りです。

○環境
RedHat9
PostgreSQL7.3.4
Access2000
ODBCドライバ7.03.02.00

○行いたいこと
Access上でリンクテーブルを基に下記のようなクエリーを作成しました。
[フィールド名]  [データ型(Postgre)]	[コントロール(Access上)]
ptnum			char(8)		テキストボックス
deptcode		char(2)		テキストボックス
consulutdate		date		テキストボックス
selected		boolean		チェックボックス

(ちなみに、作っているのはカルテ管理のシステムで、ptnumは患者番号、
deptcodeは診療科コード、consultdateは来院日です。)

フォーム上のテキストボックス(deptcode、consultdate)の値をもとに上記クエリーに
第一段目の検索を行う。
抽出結果がサブフォームに表示される。
抽出結果の各レコードの右端にチェックボックス(selected)がある。
第二段目の検索として、チェックボックスにチェックを入れたレコードのみ
抽出する。

○トラブル
deptcodeとconsultdateによる第一段目の検索は問題なく行われます。
抽出後に、各レコードの右端のチェックボックス(selected)にチェックを入れて
更に絞り込みを行う際にAccessで「ODBC-- 呼び出しが失敗しました」と表示されます。

○自己調査結果
ODBCドライバのログを採取しました。
長いので気になったところのみ抜粋します。

--- 抜粋1 ---
診療録管理      e88-e60	EXIT  SQLDriverConnectW  with return code -1 (SQL_ERROR)
	HDBC           0B4D15E8
	HWND           00070146
	WCHAR *        0x0B499EF0 [   -3] "******\ 0"
	SWORD                  -3
	WCHAR *        0x0B499EF0
	SWORD                   8
	SWORD *        0x00000000
	UWORD                   0 <SQL_DRIVER_NOPROMPT>

	DIAG [28000] FATAL:  user "Admin" does not exist
 (210) 
--- 抜粋1ここまで ---

"Admin"というユーザーが存在しないとのことなので、PostgreSQLに
ユーザーAdminを追加しましたが、Accessを起動したとたんにODBC接続エラーが出る
ようになった(状況が更に悪化した)ため、dropuserで元に戻しました。


--- 抜粋2 ---
診療録管理      e88-e60	EXIT  SQLExecDirectW  with return code -1 (SQL_ERROR)
		HSTMT               0B4D4320
		WCHAR *             0x10F242B0 [      -3] "SELECT "tbl_ptinf"."ptnum","tbl_outpatient"."ptnum" ,"tbl_outpatient".

    〜・中略・〜

AND ("tbl_outpatient"."deptcode" =  ? ) ) AND ("tbl_outpatient"."selected" = 1) ) ) \ 0"
	SDWORD                    -3

	DIAG [S1000] ERROR:  Unable to identify an operator '=' for types 'boolean' and 'integer'
	You will have to retype this query using an explicit cast (7) 
--- 抜粋2ここまで ---

問題になっているのはSELECT文(WHERE句)の最後の部分、"tbl_outpatient"."selected" = 1
のようで、boolean型のフィールドに対して演算子"="を使うのがが良くないと言われているようです。
Accessではコマンドボタン"cmd_絞込"のクリックイベントには以下のSQL文を割り当てています。
(長いので途中は略します。)

--- SQL文 ---
SQL = "SELECT query_purge_candidate_op.ptnum, query_purge_candidate_op.value, 
query_purge_candidate_op.ptname, query_purge_candidate_op.ptkana, 
query_purge_candidate_op.consultdate, query_purge_candidate_op.selected "

 〜・ 中略 ・〜

 AND ((tbl_opejected.deptcode) Is Null) AND ((tbl_opejected.consultdate) Is Null)
 AND ((tbl_opejected.fvisitdate) Is Null) AND (query_purge_candidate_op.selected=True));"
--- SQL文ここまで ---

SELECT文(WHERE句)の末尾の query_purge_candidate_op.selected=True の部分が
問題の箇所と思われますが、Trueを-1にする、yesにする、何もつけない(演算子=も)等、
プロシージャの"selected = True"の部分を手当たり次第変えてみましたが依然、
[ODBC --呼び出しが失敗しました]が表示されます。

長文で申し訳ございませんが、対策をご存じの方がいらっしゃいましたら
ご教示頂ければ幸いです。

------------------------------------------------------------
西尾大助       d-nishio @ ta2.so-net.ne.jp



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