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

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