[ ロック方式]特性は、オンラインタスクとバッチタスクの両方で有効です。ロックがかけられるタイミングを指定します。ロックがかけられた場合、そのレコードには、ほかのユーザは(書き込み用の)アクセスができなくなります。
また、ロックがかけられると同時に、オリジナルのデータ(レコードが最初に読み取られた時の内容)とメモリに格納されているデータ(ロックの実行時に読み取られた内容)の比較が行われます。詳細については、「データ管理」を参照してください。
[ ロック方式]特性には、次のいずれかの値を指定することができます。
I=即時
この値を指定しておくと、レコードが読み込まれると同時に、そのレコードにロックがかけられます。したがって、レコードの内容の比較は不要です。ロックは、解除されるまで有効です。この設定は、データの完全性は高くなりますが並行性は低くなります。
バッチタスクでは、この設定がデフォルトです。マルチユーザ環境のオンラインタスクでは、この設定にしておくと、レコードのロックが異常に継続することがあります。これは、長時間にわたって同じレコードに対して作業を行うユーザもいるためです。この値は、物理的トランザクションモードにのみ適用されます。
O=入力時
この値にしておくと、レコードが読み込まれた後、ユーザがレコードの更新を始めた時にロックがかけられます。オンラインタスクでは、この設定がデフォルトです。オンラインタスクのタスク特性でのデフォルト設定は、[トランザクションモード]は「遅延トランザクション」、[ロック方式]は、「なし」になります。
バッチタスクでは、ユーザとの対話がないため、最初の項目処理([レコード後]で実行されます)の際にロックが実行されます。または、ロックが必要な最初のタスクまたはプログラムがコールされた時に、ロックがかけられます。詳細は、「コール処理コマンド」を参照してください。
この設定の場合、レコードの内容の比較が必要になります。この設定は、[更新レコードの確認]特性で行います。
Magicは、以下の場合にロックを発行します。
入力項目を更新した時
[ロック]特性を 「Yes」 にしてタスクやプログラムをコールした時
[項目更新]処理コマンドの[更新取消可]特性を「No」 にしたタスクを実行した時
データ入力コマンドを実行した時
イベントプログラムがイベントのデータビューをロックした時
B=更新時
この設定では、データがデータベースに書き込まれる時にロックが実行されます。この場合、オンラインタスクでは、ユーザがレコードの入力を行っている時にはロックはかけられません。また、オンラインタスクとバッチタスクのいずれの場合も、[レコード後]の実行中にロックがかけられることはありません。この設定ではレコードの内容の比較が行われますが、比較で内容が異なった時には、データベースへのデータの書出は実行されず、その旨のメッセージが表示されます。
なお、現在のタスクから子タスクが呼び出されている時には、その子タスクによって別のテーブルにデータが書き込まれることもあります。その一方、タスクのレコードがデータベースに書き込まれていない場合、データの整合性に問題が発生します。トランザクションの継続時間が短ければ並行性はあがりますが、データの完全性を犠牲にすることになります。
したがって、この「更新時」は、データの書込先のデータベースでロック処理による負荷が大きい時、または、比較で内容が異なっても、タスクの構造上、データの整合性を維持できる時に限って指定するようにします。この値は、物理的トランザクションモードにのみ適用されます。
N=なし
この設定では、レコードにロックはいっさいかけられません。
そのため、この設定は注意して使わなければなりません。つまり、現在、アクセスされているレコードに対しては別のユーザも変更が可能で、したがって、データの整合性に問題が起こります。
参照