Delphi ADOQuery的属性 locktype、CursorLocation 、Filter、CursorType、CancelBatch 和 UpdateBatch

以下数据,部分来自网络的收集,部分为自己测试后的原创整理,希望对你有帮助,更新会注明日期。

1、locktype 指定用户打开数据集时对数据集的锁定级别:

  • ltUnspecified //未指定锁定级别
  • ltReadOnly //Read-only 只读 ,会加快数据读取速度
  • ltPessimistic //记录级别(该记录被编辑时其它用户不能用)
  • ltOptimistic //独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
  • ltBatchOptimistic //批量模式(使用缓存,进行批量提交)

 ADOQuery的属性含义:

  • ltUnspecified //不特別指定
  • ltReadOnly //选出來的资料表只能读,无法写入
  • ltPessimistic //选出来的资料表可以写入,当改记录写入时会立刻写入并锁定
  • ltOptimistic //选出来的资料表可写入,当该记录表写入时不会立刻写入但会锁定,当执行updates时才正式写入改记录
  • ltBatchOptimistic //选出来的资料表可写入,当该记录写入时不会立刻写入但会锁定,当执行updates才正式整批写入该记录(可以修改多条整批update)

例如:开启本地缓存

ADOQuery1.LockType:=ltBatchOptimistic;   //批处理
ADOQuery1.CacheSize:=1000;           //缓存大小 
ADOQuery1.CursorLocation:=clUseServer;   //服务端模式

// 如果是想保存在硬盘文件,则
ADOQuery1.LoadFromFile(); 
ADOQuery1.SaveToFile();    //数据处理就在本地进行了,减少了网络传送

ADOQuery1.UpdateBatch    //把缓存中修改的数据提交到服务器;更新数据

以上头几句数据其实真正有用的是这两句: --- -2019.08.22

ADOQuery1.LockType:=ltBatchOptimistic;   //批处理
ADOQuery1.UpdateBatch       //把缓存中修改的数据提交到服务器;更新数据

其余的加上去,反而会造成各种错误要处理,什么错误?

例如:1)“提供程序不能确定该值,该字段的默认值不可用,或用户未设置新值” , 产生错误的模块:ClUseServer

   2)“BOF或EOF中有一个是“真”,或者当前的记录已被删除” ,产生错误的模块 CasheSize

另外说明一下,CasheSize大小的设置,其实在clUseClient 模式下无效果。 ----2019.08.22

2、CursorLocation //使用CursorLocation指示使用连接对象连接到ADO数据存储的游标是使用客户端游标库还是服务器端游标库。游标位置仅影响设置属性后打开的连接。CursorLocation的默认值是clUseClient。

clUseClient //提供了更大的灵活性。所有数据都被检索到本地机器上,然后在那里进行操作,允许服务器通常不支持的操作,比如对数据进行排序和重新排序以及附加过滤。SQL语句是在服务器上执行的,因此对于使用WHERE子句限制结果集的语句,只会将缩减后的结果集检索到本地游标。

clUseServer //提供的灵活性较小,但对于大型结果集可能更有利(或更必要)。当结果集的绝对大小超过创建客户端游标所需的可用磁盘空间时,就有必要使用服务器端游标。而且,许多服务器只支持单向游标。这将阻止在结果集中向后移动数据集中的记录指针(甚至一条记录)。

3、Filter 属性值,即过滤数据

例如:

ADOQuery1.Filter:='Test='+''''+Edit1.text+'''';

注意:Filtered需要设置 为 true

4、CursorType //游标类型

打开ADO数据集时用于记录集的游标类型。必须在激活数据集组件之前设置游标类型。在其他游标方面,CursorType影响记录集的方向滚动和其他用户所做更改的可见性。

CursorType的默认值是ctKeyset。

  • ctOpenForwardOnly //向前移动 除了只能在记录集中向前移动以外,其它的和动态游标类似。 (只能向前滚动的光标;性能更好,因为只需要单通记录集。)
  • ctKeyset //键集 – 不允许查看其他用户添加的记录和访问其他用户删除的记录。 (其他用户添加的记录不可见;其他用户删除的记录不可访问。)
  • ctDynamic //动态 – 允许其他用户插入、更新和删除,支持在记录集中所有方向上的移动。 (其他用户对数据的修改、删除和插入可见;允许前后滚动。)
  • ctStatic //静态 - 支持在记录集中所有方向上的移动。但是其他用户的插入、更新和删除操作不可见。 (记录的静态副本;其他用户不可见的数据更改;主要用于报告。)
  • ctUnspecified //尚未指定特定的游标类型。

5、CancelBatch 和 UpdateBatch 即取消缓存 和 更新缓存 到服务器

通用的几个参数说明

  • arCurrent :当前记录
  • arFiltered :符合Filter过滤后的所有记录(如果你使用Filter过滤的话)
  • arAll :所有记录
  • arAllChapters :所有节点,具体使用未知

例如:

CancelBatch( arCurrent ) ;   //取消当前行记录
UpdateBatch ( arCurrent );     //更新当前行记录

  

创建时间:2015.04.24   更新时间:2019.08.22 2020.02.03