TClientDataSet 介绍(一)

     一。  ClientDataSet初认识:

1. 从类的继承关系上来看,是TDataSet这个抽象类的子类,所以我们可以在TDataSet这个抽象层次上对其进行我们熟 悉的操作,比如导航、排序、过滤、编辑。

2.要注意的是,TClientDataSet使用了一种全新的技术,它将所有的数据均放在内存中,所以 TClientDataSet是个只存在内存中的“虚拟表”,因此对数据库的操

作是非常快的。在PIII 850,512MB的机器上对十万条记录进行建索引的操作,花费的时间少于半分钟。与一般的数据集组件不同,

3. TClientDataSet两个重要属性。第一个是其Data属性,这是当前内存数据的视 图,反映了所有的数据改变。如果用户从数据中删除一条记录,则此记录将从Data中消失,

相应地,加入一条新记录后,此记录便存在Data属性中了。

另 一个数据源是Delta属性,即增量的意思,这个属性反映了对数据的改变。无论是向Data属性新增还是删除记录,都会在Delta中记录下 来,如果是修改了Data中的记录,

则会在Delta保存两条相应的记录,一条是原始记录,另一条仅包含修改的字段值。正因为Delta的存在和 TClientDataSet在内存中记录数据的特点,所有的改变都没有立即

更新加对应的物理存储中,可以根据这些信息在适当的时候恢复,所以 TClientDataSet天生具有缓冲更新功能。

二。ClientDataSet主要方法:

 1. 打开数据集:ClientDataSet对象的Active属性设为True或者调用其Open方法后,ClientDataSet会向 DataSetProvider发送一个取数据包请求。于是DataSetProvider

便会打开对应的数据集,将记录指针指向第一条记录,然后从头到 尾依次扫描。对于扫描到的每一条记录,都会将其编码成一个variant数组,我们通常将它称之为数据包。

完成扫描后,DataSetProvider会 关闭指向的数据集,并将所有的这些数据包传递给ClientDataSet

2.  取消修改 本地对数据库的操作:同其它数据库组件一样,edit,append,post.

 特殊的:cancel 取消当前记录的修改。只适合没有post的。且只能修改当前一条记录,若修改了多条,则只能取消最后一条。

         RevertRecord  取消post的修改,也是只能取消一条,针对当前一条记录的操作。若鼠标点击的记录没有修改则无效果。。

        ChangeCount属性返回日志中记载的修改次数。如果一条记录被反复修改了多次。
   UndoLastChange能够逐级取消上一次的修改,。如同word中的撤消效果。若同一条记录依次被修改为1,2,3,4 状态。则依次 还原为 4 3 2 1

    CancelUpdates将把日志清空,取消所有的修改,对整个表的修改。

 3. 过滤功能 要设置filted 为true

  ClientDataSet.Filter := 'Name = ' + QuotdStr('李*') + ’ and sex=''男''';  //像sql 语句的where 条件就可以了。

4. 关闭与其它数据库暂时连接

.ClientDataSet-->DataSource-->DBComponent
这 样的结构,处理数据的时候就直接操作ClientDataSet。但是大多DBComponet都会立即响应ClientDataSet的变化。如果你是 向ClientDataSet中插入很多数据时候,DBComponent就要响应几次,而且响应过程根据不同的控件,速度,过程数量都不一样。这样就影 响了程序的执行效率。所以在对ClientDataSet处理中,我是用ClientDataSet.DisableControls和 ClientDataSet.EnableControls方法:打开和关闭DBComponent与ClientDataSet的数据显示关系。
例如:
ClientDataSet..DisableControls;
for I := 0 to 10000 do
begin
ClientDataSet.Append;
...
ClientDataSet.Post;
end;
...
ClientDataSet.EnableControls
...
这样做以后你会发现处理速度比以前没有使用方法的时候有成倍的提高。

 

转载于:https://www.cnblogs.com/cnby/p/3990603.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值