Database event

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11.2 (Modified)


Database event 倍長整数

引数説明
このコマンドには、引数はありません。
戻り値倍長整数0  トリガ実行サイクル外
1  新規レコード保存時
2  既存レコード保存時
3  レコード削除時

説明

トリガ内から呼び出されると、Database event コマンドは、データベースイベントのタイプ、つまりそのトリガが起動された理由を示す数値を返します。

以下のようなあらかじめ定義された定数があります。

定数
On Saving New Record Event倍長整数1
On Saving Existing Record Event倍長整数2
On Deleting Record Event倍長整数3

トリガ内で、複数のレコードに対してデータベース操作を実行すると、トリガの正確な実行を妨げる条件 (通常、ロックレコード) に遭遇します。この状況の例としては、[Invoices] テーブルにレコードを追加しているときに、[Products] テーブルにある複数のレコードを更新する場合が挙げられます。この時点で、必ずデータベースの操作を停止して、データベースのエラーを返さなければなりません。そうすることにより、起動プロセスがそのデータベースリクエストを実行できないことを理解します。起動プロセスはトリガによって実行された不完全なデータベース操作を、トランザクション中にキャンセルできなければなりません。このような状況が発生した場合、トリガ内から何らかの操作を試みた前からそのプロセスがトランザクション内にあることを確かめる必要があります。これを実行するには、In transaction コマンドを使用します。

トリガのカスケードを呼び出す場合には、4Dには、使用可能なメモリの容量以外に制限はありません。トリガの実行を最適化するために、データベースイベントだけでなく、トリガがカスケードされて起動される際の呼び出しのレベルに基づいて、トリガのコードを記述することもできます。例えば、[Invoices] テーブルに対する削除データベースイベントの中で、[Invoices] レコードの削除が、削除された [Customers] レコードに関連したすべての送り状の削除にともなうものである場合には、[Customers] 総売上げフィールドの更新をスキップすることもできます。これを実行するには、Trigger levelTRIGGER PROPERTIES コマンドを使用します。

例題

Database event コマンドを使用して、以下のようにトリガを作成します。

      `[anyTable] 用のトリガ
   C_LONGINT($0)
   $0:=0   `データベースリクエストが許可されると仮定する
   Case of
      : (Database event=On Saving New Record Event)
         `新規に作成されたレコードの保存のために適切な動作を実行する
      : (Database event=On Saving Existing Record Event)
         `既存のレコードの保存のために適切な動作を実行する
      : (Database event=On Deleting Record Event)
         `レコードの削除のために適切な動作を実行する
   End case

参照

In transaction, Trigger level, TRIGGER PROPERTIES, トリガ.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次