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

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