将 TQuery 中的当前字段获取到 TField

Get current field in TQuery to a TField

这与 another question 相关,但与原始内容不相称。当调用 Post 时,如何获取修改为 TField 的字段(或多个字段)?

对于日志记录,我使用 OnBeforePost 事件,它在发布数据之前被调用(如其所说)。当然,这样做的缺点是您的日志 table 必须具有足够宽的字段以容纳所有可能的内容。

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;