我在跟踪ClientDataSet中fkData字段的更改时遇到了一些问题。
我使用该程序填充fkInternalCalc字段并进行相当多的更改(我将使用fkInternalCalc字段将计算驱动到其他fkInternalCalc字段)。
我可以调用CDS.ChangeCount并得到0的结果(因为没有fkData字段实际发生了变化)。
但是当我调用CDS.StatusFilter:= [usModified]时,我看到很多记录 - 因为当ChangeCount忽略fkInternalCalc时,StatusFilter没有 - 它显示对所有内容的更改。
我错过了一些可以过滤的机制(usmodified和fkData)吗?
(出于各种性能原因,我不能使用简单的fkCalculated)
使用Delphi Tokyo Enterprise。
TIA干杯,EdB
如果我理解正确的话,我认为下面的代码会做你想要的。它只是一个测试平台,需要2个CDS,每个CDS都有一个数据源和网格。
如您所见,每次将更改发布到第一个CDS时,ClientDataSet1Value字段都会更新,但第二个CDS仅显示已更改fkData字段的行;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
{
ClientDataSet1ID: TIntegerField; // fkData
ClientDataSet1Name: TStringField; // fkData
ClientDataSet1SaveCount: TIntegerField; // fkInternalCalc
}
ClientDataSet1.CreateDataSet;
for i := 1 to 3 do
ClientDataSet1.InsertRecord([i, 'name of ' + IntToStr(i)]);
end;
procedure TForm1.ClientDataSet1BeforePost(DataSet: TDataSet);
begin
if ClientDataSet1SaveCount.IsNull then
ClientDataSet1SaveCount.AsInteger := 1
else
ClientDataSet1SaveCount.AsInteger := 1 + ClientDataSet1SaveCount.AsInteger;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet2.Data := ClientDataSet1.Data;
ClientDataSet2.StatusFilter := [usModified];
end;
在Button2Click
之后,第二个CDS的网格将仅显示其fKData字段已被修改的行,或者如果没有行修改了fkData字段数据,则显示单个空白行。