加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 检查TClientDataset中是否更改了行

发布时间:2020-12-15 04:14:24 所属栏目:大数据 来源:网络整理
导读:我有一个带有n个字段的TClientDataset,我必须循环遍历它们以计算有多少已经改变但是做了: if (Cds.fields1.Value Cds.fields1.OldValue) and (Cds.fields2.Value Cds.fields2.OldValue) etc.... 或者通过Cds.fields循环[I]不是很“干净” 有Cds.RowChanged
我有一个带有n个字段的TClientDataset,我必须循环遍历它们以计算有多少已经改变但是做了:
if (Cds.fields1.Value <> Cds.fields1.OldValue) and (Cds.fields2.Value <> Cds.fields2.OldValue) etc....

或者通过Cds.fields循环[I]不是很“干净”

有Cds.RowChanged方法还是什么?

解决方法

您可以使用TClientDataSet的UpdateStatus属性:
if Cds.UpdateStatus = usModified then
  //  current row was changed

其他可能的值是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;

您还可以使用其StatusFilter属性临时过滤TClientDataSet以选择具有特定UpdateStatus的行:

procedure TCDSForm.Button1Click(Sender: TObject);
begin
  if CDS.StatusFilter = [] then
    CDS.StatusFilter := [usModified]
  else
    CDS.StatusFilter := [];
  Caption := IntToStr(CDS.RecordCount);
end;

请注意,将StatusFilter设置为usModified的CDS.RecordCount不一定返回与CDS.ChangeCount属性相同的值,因为ChangeCount值包括插入的行数以及已修改的数字.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读