这与another question有关,但不足以将其包含在原始版本中。调用Post时,如何获取已修改为TField的字段(或字段)?
答案 0 :(得分:1)
对于日志记录,我使用OnBeforePost
事件,该事件在发布数据之前被调用(正如它所说)。当然,缺点是您的日志表必须具有足够宽的字段来容纳所有可能的内容。
procedure TMyData.SomeTableBeforePost(DataSet: TDataSet);
var
i: Integer;
begin
for i := 0 to DataSet.FieldCount - 1 do
begin
// Skip calculated and lookup fields
if DataSet.Fields[i].FieldType = ftData then
begin
if DataSet.Fields[i].OldValue <> DataSet.Fields[i].NewValue then
begin
LogTable.Insert;
LogTableColumnName.AsString := DataSet.Fields[i].FieldName;
LogTableOldValue.Value := DataSet.Fields[i].OldValue;
LogTableNewValue.Value := DataSet.Fields[i].NewValue;
LogTable.Post;
end;
end;
end;
end;