[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 メーリングリストの案内