键集游标

适用于:Access 2013、Office 2013

在检测更改的能力方面,键集游标提供的功能介于静态游标和动态游标之间。 像静态游标一样,它并不总是会检测对结果集的成员及顺序的更改。 像动态游标一样,它确实会检测对结果集中行的值的更改。

键集驱动型游标由一组唯一标识符(键)来控制,该标识符集合称为键集。 键是从一组列(这些列可唯一标识结果集中的行)中生成的。 键集是查询语句返回的所有行中的键值的集合。

使用键集驱动型游标时,将为游标中的每一行生成和保存相应的键,并将键存储在客户端工作站或服务器上。 在访问每一行时,将用存储的键来从数据源提取当前数据值。 在键集驱动型游标中,当键集被完全充满时,会将结果集成员冻结起来。 此后,影响成员的添加或更新将不包含在结果集之内,直到重新打开该结果集。

当用户在结果集中滚动时,(由键集所有者或其他进程)对数据值所做的更改是可见的。 只有当游标关闭并重新打开时,(由其他进程)在游标外部执行的插入才是可见的。 在结果集末尾,从游标内部执行的插入是可见的。

当键集驱动型游标试图检索已删除的行时,该行将以"洞"的形式出现在结果集中。 虽然该行的键存在于键集中,但该行不再存在于结果集中。 如果行中的键值更新,则将该行视为已被删除然后被插入,所以,这样的行也会以洞的形式出现在结果集中。 键集驱动型游标总是能够检测到由其他进程删除的行,它还可以有选择地移除与它自己删除的行相对应的键。 执行此操作的键集驱动型游标无法检测自己的删除,因为证据已经消失。

对键列进行更新时,其工作方式类似于删除旧键然后插入新键。 如果没有通过游标进行更新,则新的键值是不可见的。 如果通过游标进行更新,则在结果集的末尾可以看见新的键值。

键集驱动型游标有一个称为键集驱动型标准游标的变体。 在键集驱动型标准游标中,结果集中行的成员和行的顺序在游标打开时是固定的,但由游标所有者对这些值所进行的更改和由其他进程所进行的已提交更改是可见的。 如果更改使某行丧失了成员资格或影响了该行的顺序,则只有关闭并重新打开游标后,该行才会消失或移动。 插入的数据不会出现,但对现有数据的更改会在提取行时出现。

要想正确地使用键集驱动型游标是非常困难的,因为对数据更改的灵敏度取决于许多不同的环境(如上文所述)。 但是,如果并发更新对应用程序而言并不重要,应用程序能以编程方式处理坏键,而且必须直接访问某些键行,则可能适合使用键集驱动型游标。 使用 adOpenKeysetCursorTypeEnum 指示你想要在 ADO 中使用键集游标。