データセット データの変更(FireDAC)
データの編集(FireDAC) への移動
TFDQuery、TFDTable、TFDStoredProc、TFDMemTable などの FireDAC データセットでは、TDataSet の標準メソッドを使ったレコードの挿入、編集、削除をサポートしています。FireDAC データセットの場合、更新の編集とポストがデフォルトで有効になっています。
編集の制御
UpdateOptions.ReadOnly が False の場合は、データセットの編集が有効です。以下の操作が可能です。
- (末尾への)追加(UpdateOptions.EnableInsert が True の場合):
FDQuery1.Append;
FDQuery1.FieldsByName('id').AsInteger := 100;
FDQuery1.FieldsByName('name').AsString := 'Audi A6';
FDQuery1.Post;
- 編集(UpdateOptions.EnableUpdate が True の場合):
FDQuery1.Edit;
FDQuery1.FieldsByName('name').AsString := 'Audi A6 Avant';
FDQuery1.Post;
- 削除(UpdateOptions.EnableDelete が True の場合):
FDQuery1.Delete;
Post の呼び出し時に "フィールド値が必要です" というメッセージが出力されないようにするには、UpdateOptions.CheckRequired を False に設定します(デフォルトは True です)。
更新のポスト
更新をデータベースにポストするために、FireDAC では、元の SQL クエリが以下のルールに従っている場合、自動的に更新 SQL コマンドを生成します。
- コマンドは SELECT でなければならない。
- FROM 句の最初のテーブルが主キー(PK)を保持していなければならない。
- 主キー フィールドが SELECT リストに含まれていなければならない。
- SELECT 文には DISTINCT、GROUP BY、UNION などの句が含まれていてはいけない。これは、"絶対に必要なこと" というよりはむしろ、論理上必然のルールです。
また、一意識別フィールドなど、正しいメタデータが提供されている必要があります。TFDQuery に対して更新の自動ポストを有効にする最も簡単な方法は、UpdateOptions.RequestLive を True に設定することです(デフォルトは True です)。クエリが更新可能かどうかを自動的にチェックできる可能性はないので、プログラマ自身でそれを判断する必要があります。
クエリが上記のルールに従っていない場合、または、ポストをアプリケーションでオーバーライドする必要がある場合は、TFDUpdateSQL コンポーネントまたは OnUpdateRecord イベント ハンドラを使用できます。
更新は、Post メソッドまたは Delete メソッドの呼び出しで直ちにデータベースにポストすることもできますし、キャッシュして後でポストすることもできます。遅延更新のポストは、オフライン接続と共に使用することができます。
データセットを空にする
レコードの削除を記録して DB に削除をポストすることなく、効果的な方法でデータセットを空にすることができます。ほとんどの場合、これはインメモリ データセットに役に立ちます。データセットを空にするには、以下のいずれかのメソッドを使用します。
- EmptyDataSet - データセット レコードをすべて削除します。
- EmptyView - フィルタや範囲などの適用後、アクセス可能なレコードのみ削除します。