デフォルト値の指定(FireDAC)
データの編集(FireDAC) への移動
OnNewRecord イベント ハンドラの使用
Delphi で新しいレコード フィールドにデフォルト値を割り当てる場合には、OnNewRecord イベント ハンドラを使用する方法が標準的です。このイベント ハンドラは、自動インクリメント フィールドや詳細レコード リンク フィールドに値が設定され、自動デフォルト値が割り当てられた後で起動されます。このイベント ハンドラで上記の値をオーバーライドしたり、複雑なカスタム ロジックを使って初期値を割り当てることができます。
このイベント ハンドラは、任意の時点でデータセットに割り当てることができます。
デフォルト式の値の指定
FireDAC では、式を TField.DefaultExpression プロパティに割り当てることができます。この式は、Insert/Append メソッド呼び出しの中で一度だけ評価され、該当するフィールドに初期値として割り当てられます。この値は、後でアプリケーションによってオーバーライドすることができます。フィールドの TField.FieldKind が fkInternalCalc
であれば、DefaultExpression を使ってフィールド値が計算されます。
データセットが閉じているときに DefaultExpression フィールドに値が割り当てられると、それは自動的に適用されます。データセットが開いている場合には、UpdateAttributes メソッドを呼び出して変更を適用してください。以下に例を示します。
FDQuery1.Open;
...
FDQuery1.FieldByName('ObjGUID').DefaultExpression := 'NEWGUID()';
FDQuery1.UpdateAttributes;
FireDAC がデータベース ディクショナリから列のデフォルト式を自動的に取得することはありません。式を割り当てる最も簡単な方法は、設計時にフィールド エディタを使用することです。
デフォルト値の更新
以下の DBMS については、結果セットの列にデフォルト値が設定されていることを FireDAC が自動的に認識します。
DBMS | 説明 |
---|---|
Firebird | fiMeta が FetchOptions.Items に含まれていて、ExtendedMetadata が True である
|
InterBase | fiMeta が FetchOptions.Items に含まれていて、ExtendedMetadata が True である
|
MySQL | |
PostgreSQL | fiMeta が FetchOptions.Items に含まれていて、ExtendedMetadata が True である
|
Teradata Database | fiMeta が FetchOptions.Items に含まれていて、ExtendedMetadata が True である
|
列にデフォルト値が設定されていると FireDAC が認識したら、TField.AutoGenerateValue が arDefault
に設定されます。そうでない場合には、AutoGenerateValue を手動で設定することができます。新しいレコードを追加したときに該当するフィールドの値が割り当てられていなければ、FireDAC は新しいレコードを送信した後でフィールド値を自動的に更新します。