4D v12.4

Database event

ホーム

 
4D v12.4
Database event

 

Database event 


 

Database event -> 戻り値 
引数   説明
戻り値  倍長整数 in 0 トリガ実行サイクル外 1 新規レコード保存時 2 既存レコード保存時 3 レコード削除時

説明   

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

テーマに以下のような定義済み定数があります。

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


トリガ内で、複数のレコードに対してデータベース操作を実行すると、トリガの正確な実行を妨げる条件 (通常、ロックレコード) に遭遇します。この状況の例としては、[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

 
プロパティ 

プロダクト: 4D
テーマ: トリガ
番号: 369

 
履歴 

変更: 4D v11 SQL Release 2

 
参照 

In transaction
Trigger level
TRIGGER PROPERTIES
トリガ