我有一个绑定到DBGrid的TZTable(ZEOSlib)现在我需要知道用户更改了哪个特定的TField。
我试过
if NOT (taPositionenArtNrGH.NewValue = taPositionenArtNrGH.OldValue) then
ShowMessage('ArticleNumber changed');
我把代码放在
中但是在Debugger中,OldValue始终是NewValue。如何查看哪个字段已更改?
答案 0 :(得分:2)
您可以使用UpdateStatus : TUpdateStatus
。例如:
在OnCalcFields事件中使用:
procedure TDM1.ZTable1CalcFields(DataSet: TDataSet);
begin
if ZTable1.UpdateStatus in [usModified] then
begin
ZTable1Status.value := 'Modified';
ZTable1FNameOldValue.value := ZTable1FNAME.OldValue;
end
else
ZTable1Status.value := 'UnModified'
end;
结果:
编辑:
您可以检测字段级别更改,如:
if ZTable1.UpdateStatus in [usModified] then
begin
for I := 0 to ZTable1.Fields.Count - 1 do
begin
if ZTable1.Fields[i].OldValue <> ZTable1.Fields[i].NewValue then
-- do something with this field
end;
end;
答案 1 :(得分:1)
NewValue属性仅在使用时访问数据时可用 启用了TClientDataSet组件或缓存更新。
答案 2 :(得分:1)
如果您只是想知道哪些字段已更改,为什么不使用TField.OnChange
事件?您可以填写此事件中的字段名称列表,并在OnAfterPost
中清除它。但Modified
属性确实非常有用;奇怪的是它尚未实施。