レコードの変更状況の確認
クライアント データセットを使用した更新情報のキャッシュ への移動
ユーザーがクライアント データセットを編集するときに、行われた編集についてのフィードバックがあると便利な場合があります。特に便利なのは、編集箇所に移動して[元に戻す]ボタンをクリックするなどで、ユーザーが特定の編集を元に戻せる機能を作成する場合です。
どのような更新が行われたかのフィードバックを返すには、UpdateStatus メソッドと StatusFilter プロパティを使用します。
UpdateStatus は、現在のレコードに対して更新が行われていれば、その更新の種類を示します。有効な値は以下のいずれかです。
- usUnmodified: 現在のレコードに変更がないことを示します。
- usModified: 現在のレコードが編集されたことを示します。
- usInserted: ユーザーが挿入したレコードであることを示します。
- usDeleted: ユーザーが削除したレコードであることを示します。
StatusFilter は、どの種類の更新を変更ログに表示するかを制御するためのものです。キャッシュされたレコードに対する StatusFilter の作用は、通常のデータに対するフィルタの作用とほとんど同じです。StatusFilter はセットなので、以下の値を任意に組み合わせて含めることができます。
- usUnmodified: 変更されていないレコードを示します。
- usModified: 変更されたレコードを示します。
- usInserted: 挿入されたレコードを示します。
- usDeleted: 削除されたレコードを示します。
StatusFilter のデフォルト値は [usModified, usInserted, usUnmodified] というセットです。このセットに usDeleted を追加すると、削除されたレコードについてのフィードバックも返すことができます。
メモ: UpdateStatus と StatusFilter は、BeforeUpdateRecord や OnReconcileError のイベント ハンドラでも役に立ちます。BeforeUpdateRecord の詳細は、「更新エラーの調停」を参照してください。
次の例は、UpdateStatus メソッドを使って、レコードの更新ステータスについてフィードバックを返す方法を示しています。ここでは、StatusFilter プロパティに usDeleted を追加し、削除済みのレコードをデータセット中に表示したままにしていると想定しています。また、データセットに "Status" という計算フィールドが追加されていることも想定しています。
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet); begin with ClientDataSet1 do begin case UpdateStatus of usUnmodified: FieldByName('Status').AsString := ; usModified: FieldByName('Status').AsString := 'M'; usInserted: FieldByName('Status').AsString := 'I'; usDeleted: FieldByName('Status').AsString := 'D'; end; end; end;
void __fastcall TForm1::ClientDataSet1CalcFields(TDataSet *DataSet) { switch (DataSet->UpdateStatus()) { case usUnmodified: ClientDataSet1Status->Value = NULL; break; case usModified: ClientDataSet1Status->Value = "M"; break; case usInserted: ClientDataSet1Status->Value = "I"; break; case usDeleted: ClientDataSet1Status->Value = "D"; break; } }