delphi 如何检测数据集中已更改的字段?

nqwrtyyt  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(188)

我有一个TDataSet,并希望检测任何字段上的每一个更改。
我怎么能

  • 检测哪个字段已更改(在数据库更新期间)?
  • 查看数据是以何种方式更改的(更改前的值=>更改后的值)?

有可能使用不同的事件

  • BeforePost
  • AfterPost
  • OnUpdateRecord

BeforePostAfterPost“只有”新的TDataSet。旧的价值观在哪里?
OnUpdateRecord具有以下参数:ASender: TDataSet; ARequest: TFDUpdateRequest; var AAction: TFDErrorAction; AOptions: TFDUpdateRowOptions
我不知道如何获取更改后的数据。

odopli94

odopli941#

procedure cdsTableBeforePost(DataSet: TDataSet);
var
  z: integer;
  sFieldName: string;
  sOldValue, sNewValue: variant;
begin
  inherited;
  for z := 0 to DataSet.FieldCount - 1 do begin // Interate through all datafields
    if DataSet.Fields[z].OldValue <> DataSEt.Fields[z].NewValue then begin // Only look at fields with changed data
      sFieldName := DataSet.Fields[z].FieldName;
      sOldValue := DataSet.Fields[z].OldValue;
      sNewValue := DataSet.Fields[z].NewValue;
      // ... do something with the retrieved information ...
    end;
  end;
end;

相关问题