同時実行制御

Forguncyの内部データベース、SQL Server、およびOracle Databaseの場合、レコードの更新時に楽観的同時実行制御(楽観的ロック)を行うようにすることが可能です。ODBCデータソースの場合、同時実行制御は行われません。

この同時実行制御が行われるのは以下の場合のみとなり、それ以外の場合には同時実行制御は行われません。

上記の場合において同時実行制御が働いた場合、以下のようなメッセージが表示され、更新処理はキャンセルされます。

 

内部データベース

Forguncyの内部データベースを使用している場合、同時実行制御は行われます。

SQL Server

更新対象のテーブルにrowversionデータ型の列が含まれている場合、同時実行制御が行われます。

Oracle Database

同時実行制御を有効化するためには、いくつかの条件と設定が必要です。

以下のようなトリガーを作成し、更新対象のテーブルに最終の更新日時が格納されるDATE型の列を用意します。

作成するトリガーの一例

CREATE OR REPLACE TRIGGER trigger_testRowversion
BEFORE UPDATE
   ON TABLE1
  FOREACH ROW
BEGIN
  :new.rowversion := current_timestamp;
ENDtrigger_testRowversion;

作成した列(上記の場合「ROWVERSION」)を[行のバージョン管理フィールド]として設定します。

ODBCデータソース

同時実行制御は行われません。以下の方法を用いて、手動で同時実行制御を実装することを検討してください。なお、この手動による同時実行制御は「テーブルデータの更新」コマンドを使用してレコードの更新を行う場合にのみ有効です。リストビューの[編集を許可]オプションを使用してレコードの更新を行う場合には、同時実行制御は行われませんので、注意してください。

  1. 同時実行制御を行いたいテーブルに任意の名称の文字データ型の列を1つ追加します。格納するデータは36桁の英数字(ハイフン含む)となりますので、このデータが格納できるサイズで作成してください。ここでは列名を「行バージョン」とします。

  2. レコードの更新を行うページの任意のセルに、「行バージョン」とデータ連結を設定します。通常、この「行バージョン」のデータはページに表示する必要がないため、列の非表示か行の非表示の機能を使用して、表示されないように設定します。

  3. レコードの更新を行う部分で、「条件分岐」コマンドを1つ追加し、以下のような条件を設定します。

  4. 3の条件が合致した場合に実行するコマンドとして、以下のような設定の「テーブルデータの更新」コマンドを設定します。「%GUID%」キーワードは、GUIDを返すForguncyが持つ特別なキーワードです。GUIDは128ビットの整数値からなる、データを一意に識別するために用いられる識別子です。

  5. 3の条件が合致しなかった場合に実行するコマンドとして、以下のような設定の「メッセージの表示」コマンドを設定します。メッセージ内容は任意のもので構いません。