データベース更新前のデルタ パケットの編集
クライアントの更新要求への応答 への移動
データセット プロバイダは、データベースに更新を適用する前に、OnUpdateData イベントを発生させます。OnUpdateData イベント ハンドラは、Delta パケットのコピーをパラメータとして受け取ります。これがクライアント データセットです。
OnUpdateData イベント ハンドラでは、データセットに書き込む前に、クライアント データセットの任意のプロパティやメソッドを使用して Delta パケットを編集することができます。特に便利なプロパティが UpdateStatus です。UpdateStatus は、デルタ パケット内の現在のレコードが、どの種類の変更を表しているかを示します。このプロパティは、次の表に示すいずれかの値を取ります。
UpdateStatus の値:
値 | 説明 |
---|---|
usUnmodified |
レコードの内容は変更されていません |
usModified |
レコードの内容が変更されました |
usInserted |
レコードが挿入されました |
usDeleted |
レコードが削除されました |
たとえば、次の OnUpdateData イベント ハンドラでは、データベースに挿入された新規レコードそれぞれに、現在の日付を挿入しています。
procedure TMyDataModule1.Provider1UpdateData(Sender: TObject; DataSet: TCustomClientDataSet); begin with DataSet do begin First; while not Eof do begin if UpdateStatus = usInserted then begin Edit; FieldByName('DateCreated').AsDateTime := Date; Post; end; Next; end; end;
void __fastcall TMyDataModule1::Provider1UpdateData(TObject *Sender, TCustomClientDataSet *DataSet) { DataSet->First(); while (!DataSet->Eof) { if (DataSet->UpdateStatus == usInserted) { DataSet->Edit(); DataSet->FieldByName("DateCreated")->AsDateTime = Date(); DataSet->Post(); } DataSet->Next(); } }