PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
21729 | 05/01/27 16:53:05 | RE(2):複数テーブルの一括更新時について By ろいたん |
21727 | 05/01/27 13:22:09 | RE(1):複数テーブルの一括更新時について By isii |
21726 | 05/01/27 10:19:44 | 複数テーブルの一括更新時について By ろいたん |
カテゴリ:PowerBuilderの開発環境
日付:2005年01月27日 13:22 発信者:isii
題名:RE(1):複数テーブルの一括更新時について
ろいたんさん、こんにちは。
>おはようございます。
>1つのテーブルのデータを複数のマスターテーブルへInsert,Update等するときの
>処理方法について教えてください。
>
>現在データウインドウ1つに順次データオブジェクトを貼り付け
>以下のようなスクリプトにて更新しています。
>
>if dw.update() = 1 then
> commit using sqlca;
> messagebox(\"書き込み\",\"書き込みが正常終了しました。\")
>else
> rollback using sqlca;
> messagebox(\"書き込み\",\"書き込みエラー:書き込みは行いませんでした。\")
>end if
>
>これだと複数テーブル更新時に(たとえば10コのテーブルの10番目)エラーが発生した場合
>更新されたテーブルと更新されてないテーブルが存在し、データに矛盾が発生します。
>
>このような現象を防ぐためにはSQL等ではトランザクション管理が有ると思うのですが、
>これと同様なことをPowerBuilderでも可能でしょうか?
>
>つまり、
>1つ目のテーブル更新OK,n番目の更新OK,・・・ときたとき、
>1つでも更新失敗の物があれば全てのテーブルをロールバックする。
>
>例えば、上記スクリプトでも
>dw.update()の戻り値をテーブル分保持して、(または合計値がテーブル数に合致する?)
>最後にcommit文やrollback文を実行すればいいだけの話でしょうか?
commitは全テーブルの更新ができたら行えばいいのでは...
if dw_1.update() <> 1 then
rollback using sqlca;
messagebox(\"書き込み\",\"書き込みエラー:書き込みは行いませんでした。\")
return
end if
: テーブル数分、更新処理を記述
if dw_n.update() <> 1 then
rollback using sqlca;
messagebox(\"書き込み\",\"書き込みエラー:書き込みは行いませんでした。\")
return
end if
commit using sqlca;
messagebox(\"書き込み\",\"書き込みが正常終了しました。\")
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.