3.5 UpdateStatus
TSimpleDataSet/TClientDataSet的UpdateStatus特性值能够让程序员得知目前数据的状态。例如这笔数据是否是原始未经过更改的数据,或是已被修改的数据,或是已被用户删除的数据,或是由用户新增的数据。表3-6列出了UpdateStatus能够拥有的特性值,以及每一个特性值代表的意义。
表3-6
|
UpdateStatus数值 |
意义 |
|
usUnmodified |
目前这笔数据尚未修改过 |
|
usModified |
目前这笔数据已经被修改过 |
|
usInserted |
目前这笔数据是属于新增的数据 |
|
usDeleted |
目前这笔数据已经被删除了 |
程序员可以直接使用程序代码来检查TSimpleDataSet/TClientDataSet的UpdateStatus特性值来决定目前记录的状态,以根据需要来处理数据。例如下面的程序代码可以把目前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把客户端的Data和Delta合并,并且清除UpdateStatus特性值。
procedure MergeChangeLog;
因此,此时TSimpleDataSet/TClientDataSet中所有的数据其UpdateStatus特性值又会被重置成usUnmodified。另外,读者要注意的是,UpdateStatus特性值只会记录一笔数据一开始的状态改变,而不会继续追踪记录的状态改变。这个意思是说,当TSimpleDataSet/TClientDataSet中的记录一开始从一笔新增数据的其UpdateStatus特性值被设定成usInserted时,如果稍后这笔数据又经过数据更改,那么UpdateStatus特性值将仍然保持usInserted,而不会同时记录已经过去了的usInserted和usModified两个状态的改变。






