首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.5  UpdateStatus

TSimpleDataSet/TClientDataSetUpdateStatus特性值能够让程序员得知目前数据的状态。例如这笔数据是否是原始未经过更改的数据,或是已被修改的数据,或是已被用户删除的数据,或是由用户新增的数据。表3-6列出了UpdateStatus能够拥有的特性值,以及每一个特性值代表的意义。

3-6

UpdateStatus数值

意义

usUnmodified

目前这笔数据尚未修改过

usModified

目前这笔数据已经被修改过

usInserted

目前这笔数据是属于新增的数据

usDeleted

目前这笔数据已经被删除了

程序员可以直接使用程序代码来检查TSimpleDataSet/TClientDataSetUpdateStatus特性值来决定目前记录的状态,以根据需要来处理数据。例如下面的程序代码可以把目前TSimpleDataSet/TClientDataSet中每一笔的状态显示在主窗体之中:

procedure TfrmUpdateStatus.NotifyScroll;

var

  aUS : TUpdateStatus;

begin

  aUS := dmUpdateStatus.sdsUpdateStatus.UpdateStatus;

 

  case aUS of

    usUnmodified : SetUpdateStatusInfo(True, False, False, False);

    usModified   : SetUpdateStatusInfo(False, True, False, False);

    usInserted  : SetUpdateStatusInfo(False, False, True, False);

    usDeleted   : SetUpdateStatusInfo(False, False, False, True);

  end;

end;

 

procedure TfrmUpdateStatus.SetUpdateStatusInfo(ck1, ck2, ck3,

  ck4: Boolean);

begin

  Self.cbUnModified.Checked := ck1;

  Self.cbModified.Checked := ck2;

  Self.cbInserted.Checked := ck3;

  Self.cbDeleted.Checked := ck4;

end;

 

procedure TfrmUpdateStatus.BitBtn1Click(Sender: TObject);

begin

  if (dmUpdateStatus.sdsUpdateStatus.ChangeCount > 0) then

  begin

    dmUpdateStatus.sdsUpdateStatus.ApplyUpdates(0);

    NotifyScroll;

  end;

end;

当执行上面的程序代码时,在用户浏览每一笔数据时,这笔数据的状态便会显示在图3-21所示的相对应的勾选框中。

3-21  范例程序可通过UpdateStatus了解每一笔记录的状态

请读者注意,UpdateStatus特性值显示的信息是目前存在于客户端TSimpleDataSet/TClientDataSet缓存内存中的数据状态,一旦TSimpleDataSet/TClientDataSet调用了ApplyUpdates方法把数据更新回数据来源之中后,TSimpleDataSet/TClientDataSet便会调用MergeChangeLog把客户端的DataDelta合并,并且清除UpdateStatus特性值。

                             procedure MergeChangeLog;

因此,此时TSimpleDataSet/TClientDataSet中所有的数据其UpdateStatus特性值又会被重置成usUnmodified。另外,读者要注意的是,UpdateStatus特性值只会记录一笔数据一开始的状态改变,而不会继续追踪记录的状态改变。这个意思是说,当TSimpleDataSet/TClientDataSet中的记录一开始从一笔新增数据的其UpdateStatus特性值被设定成usInserted时,如果稍后这笔数据又经过数据更改,那么UpdateStatus特性值将仍然保持usInserted,而不会同时记录已经过去了的usInsertedusModified两个状态的改变。