PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
14977 | 01/04/07 12:55:49 | RE(5):PB5.0.02: データウィンドウのRetrieveを中断するには(自己レス) By Chicchi |
14936 | 01/04/03 22:11:30 | RE(4):PB5.0.02: データウィンドウのRetrieveを中断するには(自己レス) By Taka |
14893 | 01/03/29 16:41:31 | RE(3):PB5.0.02: データウィンドウのRetrieveを中断するには(自己レス) By Chicchi |
14889 | 01/03/29 13:59:19 | RE(2):PB5.0.02: データウィンドウのRetrieveを中断するには By Chicchi |
14859 | 01/03/28 00:36:08 | RE(1):PB5.0.02: データウィンドウのRetrieveを中断するには By M.M |
14857 | 01/03/27 18:23:15 | PB5.0.02: データウィンドウのRetrieveを中断するには By Chicchi |
カテゴリ:PowerBuilderの開発環境
日付:2001年04月07日 12:55 発信者:Chicchi
題名:RE(5):PB5.0.02: データウィンドウのRetrieveを中断するには(自己レス)
Takaさん、こんにちは。
>Chicchiさん、こんばんは。
>
>何やら複雑な方法で解決されたようですが...
>
>元発言のスクリプトにおいて、いくつかアドバイスします。
>
>その1
>RetrieveRowイベントにスクリプトを記述している場合、PowerBuilderは暗黙にYield()を
>呼び出してくれます。(レスポンスが低下するのはその証拠)
>ですので、明示的にYield()を書く必要はありません。
>
>その2
>厳密に言うと、検索をキャンセルする場合フラグをON/OFFするだけでは不十分です。
>同時にdw.DBCancel()によって終わらせてください。
>
>その3
>RetrieveRowの最中にDoubleClickedが割り込まれて実行される点に注意してください。
>その中でレスポンスウィンドウを開き、閉じた後にRetrieve関数を再発行していますね。
>ここが最大のポイントだと思うのですが、大もとのRetrieve関数によるRetrieveRowの
>タイミングで、更なるRetrieveを割り込み実行することは可能だと思いますか?
>
>解決策としては、レスポンスを開く?閉じたら再Retrieve の部分をウィンドウ関数
>などに移してください。そしてDoubleClickedには、
>
>// 検索の中断
>ib_cancel = TRUE
>This.DBCancel()
>
>// 開く(非同期呼出し)
>Parent.POST wf_OpenChild(Row)
>
>とすべきです。
>こうしておけば、大もとのRetrieveが完全に終わってからウィンドウが開くように
>なりますし、Start/Endのタイミングで複雑な処理をやらずに済みます。
具体的なご回答を頂き、ありがとうございます。デ
ータウィンドウコントロールの関数にDBCancelなんて
いうのがあること、RetrieveRowでPBがYieldをかけて
いることなど、今更ながら知らないことが多いなと痛
感させられました。
また、当然のことながら不安定な動作を避けるには、
ご指摘のとおりRetrieve中に再びRetrieveを行うよう
なスクリプトの記述には問題があるようです。本当に
的確なご指摘を頂きまして、ありがとうございました。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows98
DBMS Oracle SQL*Net 2.3
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 7.3
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.