0

select sql(IBM iではDB2)を使用して、データベースからレコードを読み取り、ユーザーが変更および更新できるフォームに表示しています。

ここで、ユーザーがこのレコードを表示している場合、同時に別のユーザーは同じracordを表示することはできますが、更新することはできません。

どうすればいいですか?同時に更新を回避するために、レコードを割り当てる(またはブロックする)このレコードを選択する方法はありますか?(それを行うための同じphp命令がある場合も)

(たとえば、この問題を防ぐためにレコードを割り当てるCHAIN命令を使用するRPG言語プログラムを使用しています)

ありがとう!

4

4 に答える 4

1

私の経験では、可能であれば、このルートをたどるのは避ける必要があります。

はい、レコードをロックすることは可能ですが、どのくらいの期間ロックを維持するつもりですか?ロックしているユーザーが「保存」を押す前に長い昼食をとった場合はどうなりますか?

あなたが抱えている問題に直面して、私は更新する前にレコードの読み取りチェックを行うことを検討します。別のユーザーによって変更されていることがわかった場合は、これにフラグを立てるか、一部のロジックで作業して、変更されたフィールドのみを変更できます。

于 2011-09-28T07:40:52.487 に答える
1

行のロックは、たとえばグリーンスクリーンアプリケーションなど、テーブルへのすべてのアクセスを制御する場合に役立ちます。すべてのアクセスを制御しない場合、たとえば、他の誰かが行を読み取るWebアプリケーションを持っている場合、またはODBCアプリケーションが行を読み取る場合、すべての行を取得できないことに不満を感じる可能性があります。テーブルにアクセスするすべてのアプリケーションでテーブルが果たす大きな役割を確実に検討してください。

そうは言っても、行をロックするDB2SQLの方法はFETCH...FORUPDATEです。

于 2011-09-28T13:42:26.183 に答える
0

はい、データの更新中にテーブルをロックできます。DB2でどのように実行できるかわかりませんが、データの更新中にテーブルをロックし、終了後にロックを解除することができます。

このリンクがあなたを助けることができますように:

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000972.htm

于 2011-09-28T07:32:39.410 に答える
0

ロックされたレコードの読み取りを回避するのはどうですか?

select * from yourtable
where field ='comparator'
SKIP LOCKED DATA

また、特定の数の行を取得することもできます

テーブルから*を選択します
。ここでfield='comparator'SKIP
LOCKED DATA
FETCH FIRST 1 ROWS ONLY

それはあなたに合いますか?

于 2015-01-31T01:55:19.827 に答える