Delphi ADOQuery的属性 locktype、CursorLocation 、Filter、CursorType、CancelBatch 和 UpdateBatch
- ltUnspecified //未指定锁定级别
- ltReadOnly //Read-only 只读 ,会加快数据读取速度
- ltPessimistic //记录级别(该记录被编辑时其它用户不能用)
- ltOptimistic //独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
- ltBatchOptimistic //批量模式(使用缓存,进行批量提交)
ADOQuery的属性含义:
- ltUnspecified //不特別指定
- ltReadOnly //选出來的资料表只能读,无法写入
- ltPessimistic //选出来的资料表可以写入,当改记录写入时会立刻写入并锁定
- ltOptimistic //选出来的资料表可写入,当该记录表写入时不会立刻写入但会锁定,当执行updates时才正式写入改记录
- ltBatchOptimistic //选出来的资料表可写入,当该记录写入时不会立刻写入但会锁定,当执行updates才正式整批写入该记录(可以修改多条整批update)
例如:开启本地缓存
1 2 3 4 5 6 7 8 9 | ADOQuery1 . LockType:=ltBatchOptimistic; //批处理 ADOQuery1 . CacheSize:= 1000 ; //缓存大小 ADOQuery1 . CursorLocation:=clUseServer; //服务端模式 // 如果是想保存在硬盘文件,则 ADOQuery1 . LoadFromFile(); ADOQuery1 . SaveToFile(); //数据处理就在本地进行了,减少了网络传送 ADOQuery1 . UpdateBatch //把缓存中修改的数据提交到服务器;更新数据 |
☆ 以上头几句数据其实真正有用的是这两句: --- -2019.08.22
1 | 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 属性值,即过滤数据
例如:
1 | 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 :所有节点,具体使用未知
1 2 | CancelBatch( arCurrent ) ; //取消当前行记录 UpdateBatch ( arCurrent ); //更新当前行记录 |
创建时间:2015.04.24 更新时间:2019.08.22 2020.02.03
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报