简体   繁体   中英

Get current field in TQuery to a TField

This is related to another question but doesn't really fit enough to include it with the original. When a Post is called, how can I get the field (or fields) that was modified to a TField?

For logging, I use the OnBeforePost event, which is called (as it says) just before the data is posted. The drawback to this, of course, is that your log table has to have fields wide enough to hold all possible content.

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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM