起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1993|回复: 2

如何使用TDeltaDataSet 用法

[复制链接]
发表于 2004-5-21 11:15:36 | 显示全部楼层 |阅读模式
1.2.41.         TDeltaDataSet

    TDeltaDataSet是用来更方便的分析数据集中的Delta(数据集的修改日志)。通常会使用TDeltaDataSet来遍历修改日志,以便获取需要做记录的数据。

继承层次和类图:
Business.System.TObject
      Business.System.TPersistent
         Business.System.TComponent
           Business.Data.TCustomClientDataSet
             Business.Data.TPacketDataSet
                Business.Data.TDeltaDataSet
  


命名空间:Business.Data.
1.2.41.1.         成员
  公共构造函数
TDeltaDataSet.Create 构造函数        初始化TDeltaDataSet类的新实例。
  公共方法
FieldModified        获取当前记录中指定字段是否被修改。
NextStatus        移动到下一个位置。

1.2.41.2.         提示
        Create方法的原型为constructor Create(ADataSet: TDataSet);需要传入一个被分析的数据集,TDeltaDataSet会将被分析的数据集的修改日志(Delta)变为自己的数据(Data),以便对该数据集的修改日志进行分析。
        可以使用FieldModified函数来判断TDeltaDataSet数据集的当前记录(也就是数据集的修改日志记录)的指定字段值是否被修改。
        NextStatus方法将TDeltaDataSet数据集的当前记录移动到下一个位置。
回复

使用道具 举报

发表于 2004-5-21 13:07:40 | 显示全部楼层

来个例子吧

TDeltaDataSet是用来更方便的分析数据集中的Delta(数据集的修改日志)。通常会使用TDeltaDataSet来遍历修改日志,以便获取需要做修改记录的数据。TDeltaDataSet类在Business.Data中。参考代码如下:


  //此处是判断被分析的数据必须处于激活并修改状态
if DataSetBZSJJ1.Active and  DataSetBZSJJ1.UpdatesPending then
   Exit;
   lDeltaDataSet:= TDeltaDataSet.Create(DataSetBZSJJ1);
   try
     while not uLogDs.Eof do
     begin
       case uLogDs.UpdateKind of
        //修改
         TUpdateKind.ukModify:
         begin
           Memo1.Lines.Add('Modify');
           //记录修改的字段
           for I := 0 to uLogDs.Fields.Count - 1 do
           begin
             lField := uLogDs.Fields[I];
             if uLogDs.FieldModified(lField) then
               Memo1.Lines.Add(Business.System.SysUtils.Format('FieldName:[%s]Old:[%s]
               New:[%s]',[lField.FieldName,Business.System.Variants.VarToStr
               (lField.OldValue),Business.System.Variants.VarToStr(lField.NewValue)]));            
           end;
           end;
           //插入
         TUpdateKind.ukInsert:
         begin
           Memo1.Lines.Add('Insert');
         end;
           //删除
         TUpdateKind.ukDelete:
         begin
           Memo1.Lines.Add('Delete');
         end
       else
         Assert(False, '');
       end;
       uLogDs.NextStatus
     end;
   finally
     uLogDs.Free;
   end;
回复 支持 反对

使用道具 举报

发表于 2005-2-3 16:50:33 | 显示全部楼层

更通俗的解释

比如客户端维护(增加、删除、修改)了一条记录,这个时候这个维护日志就会存在Delta中,在提交到服务端的时候,只提交维护的数据,没有维护的数据就不再提交了。

平台提供的TDeltaDataSet就相当于体现维护日志(Delta)的数据集,方便调用或者读取维护日志(Delta)。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-22 23:57 , Processed in 0.036162 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表