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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.