如何选择 Delphi ADO 游标位置和游标类型

How to choose Delphi ADO Cursor location and Cursor Type

我们已将 Delphi 项目(银行应用程序)从 BDE 迁移到 ADO,并且我们保留了所有默认属性,并且在单元测试时存在问题。

一期是"Row cannot be located for updating. Some values may have been changed since it was last read"

更新 table 时出现问题。 Table 员工有更新触发器,它正在更新相同的 table(Employee) 基于一些 checks.whether 触发器更新 table 或系统是否抛出上述错误。

最推荐的解决方案: ADODataSet1.Properties['Update Criteria'].value :=adCriteriaKey; 没用。

经过谷歌搜索后,我们了解到在使用 ADO 时,有一些属性很重要,例如光标位置和光标类型。

我们刚刚将 Cursor Location 从 clUseClient 更改为 clUseServer,它开始工作(神奇),我们不知道它为什么工作。

现在我们非常困惑要使用什么光标位置或光标类型。

关于我的申请:

1) 列表视图或 DBGrid 向用户显示记录。

2) 我们正在使用数据感知控件(更多控件)。

3) 有很多插入、更新和删除

3) 大约有 1000 名用户使用此应用程序。

4) 同一用户可以在同一 screen/Record.

上工作

完成 Client-Side Cursors Versus Server-Side Cursors 后,我们计划使用服务器端游标。

首先我建议你忘记ADO并使用FireDAC(或UniDAC)

当您使用触发器或有时您为字段设置默认值时会出现此问题,因为 ADO 无法在客户端找到您要更新的记录

如果将光标位置设置为服务器端,您将失去一些好的功能,例如本地排序、本地过滤和本地索引,您的记录将不会保留在内存中,数据集的速度也会降低,服务器-侧面位置也会对服务器资源产生不良影响

您使用的是什么 RDBMS?

您可以创建一个存储过程并调用它进行更新并继续使用客户端游标位置

Cursor-Location 必须与适当的 Cursor-Type 结合才能获得良好的结果,本文将对您有所帮助:

http://etutorials.org/Programming/mastering+delphi+7/Part+III+Delphi+Database-Oriented+Architectures/Chapter+15+Working+with+ADO/Working+with+Cursors/