対象製品とバージョン:Forguncy
排他制御とは、他のユーザーからファイルやデータベースを同時に利用されデータの整合性がおかしくならないように、データの読み書きやアクセスを一時的に制御することをいいます。排他制御には「楽観的同時実行制御(楽観的ロック)」と「悲観的同時実行制御(悲観的ロック)」があります。
「楽観的ロック」は、 データを更新する直前に他のユーザーによって更新されていないかどうかをチェックし、更新されていない場合にデータをロックし更新します。更新されていた場合は、更新処理をキャンセルします。
「悲観的ロック」は、データを読み出す時にロックし、書き込みが終わるまでの間、他のユーザーがそのデータに触れないようロックし続けます。
Forguncyでは、「楽観的ロック」に対応しています。
特定のデータベースにおいては、レコードの更新時に「楽観的同時実行制御(楽観的ロック)」を行います。この制御はデータベースによって行われるものと行われないものが存在しますので注意してください。
この同時実行制御が行われるのは以下の場合のみとなり、それ以外の場合には同時実行制御は行われません。
- 「テーブルデータの更新」コマンドの[対象レコード]が「カレントレコード」に設定されているコマンドを使用して更新を行ったとき
- リストビューの[編集を許可]オプションを使用してレコードの更新を行ったとき
内部データベース
Forguncyの内部データベースを使用している場合、同時実行制御は行われます。
SQL Server
更新対象のテーブルにrowversionデータ型の列が含まれている場合、同時実行制御が行われます。
Oracle Database、ODBCデータソース
※Forguncy 3以降では、Oracle Databaseでも同時実行制御をサポートしています。詳しくはForguncy 4のヘルプの 同時実行制御 か、Forguncy 3のヘルプの 同時実行制御 を参照してください。
ODBCデータソースやForguncy 2以前のOracle Databaseでは同時実行制御は行われません。以下の方法を用いて、手動で同時実行制御を実装することを検討してください。なお、この手動による同時実行制御は「テーブルデータの更新」コマンドを使用してレコードの更新を行う場合にのみ有効です。リストビューの[編集を許可]オプションを使用してレコードの更新を行う場合には、同時実行制御は行われませんので、注意してください。
- 同時実行制御を行いたいテーブルに任意の名称の文字データ型の列を1つ追加します。格納するデータは36桁の英数字(ハイフン含む)となりますので、このデータが格納できるサイズで作成してください。ここでは列名を「行バージョン」とします。
- レコードの更新を行うページの任意のセルに、「行バージョン」とデータ連結を設定します。通常、この「行バージョン」のデータはページに表示する必要がないため、列の非表示か行の非表示の機能を使用して、表示されないように設定します。
- レコードの更新を行う部分で、「条件分岐」コマンドを1つ追加し、以下のような条件を設定します。
- 3の条件が合致した場合に実行するコマンドとして、以下のような設定の「テーブルデータの更新」コマンドを設定します。「%GUID%」キーワードは、GUIDを返すForguncyが持つ特別なキーワードです。GUIDは128ビットの整数値からなる、データを一意に識別するために用いられる識別子です。
- 3の条件が合致しなかった場合に実行するコマンドとして、以下のような設定の「メッセージの表示」コマンドを設定します。メッセージ内容は任意のもので構いません。
検索キーワード: fgcinfo fgcdatabase