Luc*_*fen 5 delphi tclientdataset
我有一个带有n个字段的TClientDataset,我必须循环遍历它们以计算有多少已经改变但是做了:
if (Cds.fields1.Value <> Cds.fields1.OldValue) and (Cds.fields2.Value <> Cds.fields2.OldValue) etc....
Run Code Online (Sandbox Code Playgroud)
或者通过Cds.fields循环[I]不是很"干净"
有Cds.RowChanged方法还是什么?
Mar*_*ynA 12
您可以使用TClientDataSet的UpdateStatus属性:
if Cds.UpdateStatus = usModified then
// current row was changed
Run Code Online (Sandbox Code Playgroud)
其他可能的值是usUnmodified,usInserted和usDeleted.与TDataSet.Modified属性不同,UpdateStatus当前行在CDS.Post将其更改回CDS后仍然存在.显然,取决于您应用程序所需的这些数值中的哪一个.
如在线帮助中所述,您可以使用UpdateStatus以设置计算字段的值:
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
case TClientDataSet(DataSet).UpdateStatus of
usUnmodified: FieldByName('Status').AsString := '';
usModified: FieldByName('Status').AsString := 'M';
usInserted: FieldByName('Status').AsString := 'I';
usDeleted: FieldByName('Status').AsString := 'D';
end;
end;
Run Code Online (Sandbox Code Playgroud)
您还可以使用其StatusFilter属性临时过滤TClientDataSet以选择具有specfic的行UpdateStatus:
procedure TCDSForm.Button1Click(Sender: TObject);
begin
if CDS.StatusFilter = [] then
CDS.StatusFilter := [usModified]
else
CDS.StatusFilter := [];
Caption := IntToStr(CDS.RecordCount);
end;
Run Code Online (Sandbox Code Playgroud)
请注意,CDS.RecordCount与StatusFilter设置为usModified不一定返回的值相同的CDS.ChangeCount属性,因为该ChangeCount值包含的行数插入以及已数修改.
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |