将 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;
这与 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;