在任何时候,rdoResultset 集合中只有一行数据可以用于获取数据和修改,即当前行指针所指的那一行。通过使用下表中所列的方法或属性之一,可以在数据行之间移动当前行指针。这里的每一种方法都暗示了一个起始位置,重定位是相对这个起始位置而言的。有的时候当前行指针可能是无法确定的,或定位越界。这种情况下就不存在当前行,因此试图引用或更新数据列都是不允许的。有的时候(例如只能向前的结果集)不允许向后移动结果集,甚至不能通过使用 MoveLast 方法移到结果集的尾部。通常这是由所选择的游标类型决定的。
重定位当前行指针的方法和属性
RDO 方法和属性 | 移至 rdoResultset 对象的... | 相对于 rdoResultset 的 ... |
MoveFirst | 第一行 | 任何地方 |
MoveNext | 当前行 + 1 | 当前行 |
MovePrevious | 当前行 - 1 | 当前行 |
MoveLast | 最后一行 | 任何地方 |
Move | 向前或向后移动 'n' 行 | 当前行 |
PercentPosition | 被置入的数据行的百分比 | 第一行 |
AbsolutePosition | 第 'n' 行 | 第一行 |
Bookmark | 预先保存的位置 | 任何地方 |
LastModified | RDO 设置的预先保存的位置 | 任何地方 |
提示 使用无参数的 Move 方法可以简单地重新取得当前数据行。
注意 如果 BOF 或 EOF 属性为 True,则不能使用书签来重定位当前行指针。如果要处理一个可以滚动的 rdoResultset,并且希望重定位到一个书签,请使用 MoveFirst 方法或其它的 Move 方法来重定位到结果集。
如果该 rdoResultset 对象支持书签,那么可以将当前位置保存到一个 Variant 变量中。将 Bookmark 属性设置为一个书签,以后就能够用保存的书签重新回到 rdoResultset 中原来的位置。LastModified 也返回一个书签,可以将其保存在 Bookmark 属性中,用于重定位到最后一次修改或添加的那一行。
注意 如果使用的是只能向前的 rdoResultset 对象,那么只能使用MoveNext 方法。其它的重定位方法都是不支持的。但是,在任何时候都可以用 Close 方法关闭该结果集,或用 MoreResults 方法中止当前 rdoResultset 对象的处理。
一定要检查 EOF 和 BOF 属性,以确定重定位的当前数据行是否超出了数据集的范围。在使用 Bookmark 属性重定位当前行时,可能会定位到已经被其它用户删去的数据行,这时将导致一个可以捕获的错误,这时必须重定位到另一个有效的数据行。
详细信息 请参阅《语言参考》的“BOF 属性”、“EOF 属性”、“AbsolutePosition 属性”、“PercentPosition 属性”和“移动”部分。
只要可能,在完全置入到结果集之后必须立即执行 MoveLast 方法。当 MoveLast 定位到该结果集的最后一行之后,远程服务器将释放语句句柄、所有的页和行锁定。
在使用 MoveLast 时如果设置了 rdAsyncEnable 选项,RDO 将立即把控制返回到应用程序,从而防止不必要的锁死。这种情况下,在 StillExecuting 属性返回 False 之前,rdoResultset 数据是不可使用的。这时也会触发 QueryComplete 事件。