PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
19201 | 03/04/03 15:08:21 | RE(7):データウィンドウの更新について By KITTY |
19163 | 03/03/27 19:39:48 | RE(6):データウィンドウの更新について By asano01 |
19161 | 03/03/27 19:21:56 | RE(5):データウィンドウの更新について(再質問) By van_kaz |
19158 | 03/03/27 13:26:34 | RE(4):データウィンドウの更新について(再質問) By reon |
19157 | 03/03/27 11:45:52 | RE(3):データウィンドウの更新について(再質問) By KITTY |
19153 | 03/03/26 16:59:21 | RE(2):データウィンドウの更新について By KITTY |
19151 | 03/03/26 16:16:39 | RE(1):データウィンドウの更新について By M.M |
19143 | 03/03/26 13:11:58 | データウィンドウの更新について By KITTY |
カテゴリ:データウィンドウ
日付:2003年03月27日 19:39 発信者:asano01
題名:RE(6):データウィンドウの更新について
KITTYさん、こんにちは。
PB7で、Retrieve処理はこのFOR文の前で行っていることを前提にはなします。
違ってる場合には、ごみレスです。
DataWindowは、SELECTしたときの情報をキー情報として、テーブルを更新します。
下記の処理だと、2つめのループで常に同一行(1?ls_max)への更新をしているはずです。
Commit後、Resetもしていないし。
キー情報へも値をセットしていたら、変更された内容でUPDATEされてしまうはずです。
対応としては、外側のループの中に、retrieveを入れるのが、素直だと思います。
ps
どっちかてーと。
DBがわで、バッチ(PL/SQLとか)にすべき処理だと思いますが。
2重ループ+SELECT発行してるので、処理速度が遅くなりますし。
ネットワーク上を、SELECT文がループ回数分「飛ぶ」し。
>簡単に記述しているため分かりにくいかもしれませんが、よろしくお願いします。
>外側のループはデータを取得するための関数を呼び出す回数分回っています。
>この書き方ではupdateを行なうたびに前のデータに上書きされてしまいます。
>
>
>for l_count = 1 to l_max
>
> // ここで別のテーブルからデータを取得するための関数を呼び出します
> //(取得したデータはls_dataに格納されています)
>
> /* 取得データ件数分データウィンドウにデータを格納します */
> for ls_count = 1 to ls_max
> dw_1.Setitem(ls_count,ls_data[ls_count])
> next
> /* 更新を行ないます */
> Iret = dw_1.update(TRUE,TRUE)
> /* エラーでなかったらCOMMITを行ないます */
> if Iret1 >0 then
> COMMIT using sqlca_mdb;
> /* エラーだったらROLLBACKを行ない処理終了です */
> else
> ROLLBACK using sqlca_mdb;
> return -1
> end if
>next
>
>
>
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.