SQLFetchScroll 中的大多数滚动选项将光标相对于当前位置或绝对位置放置。 SQLFetchScroll 支持提取下一个、之前、第一行和最后一个行集,以及相对提取(从当前行集的开头提取行集 n 行)和绝对提取(提取从第 n 行开始的行集)。 如果 n 在绝对提取中为负值,则从结果集末尾对行进行计数。 因此,绝对提取行 -1 意味着提取结果行集,从结果集中的最后一行开始。
动态游标能检测到插入到结果集中的行和从结果集中删除的行,因此,动态游标在不从结果集开头读取的情况下很难根据特定序号检索行,这很可能导致操作缓慢。 此外,绝对提取在动态游标中并不十分有用,因为行号在插入和删除行时发生更改;因此,连续提取同一行数可以产生不同的行。
仅将 SQLFetchScroll 用于其块游标功能(例如报表)的应用程序可能会一次传递结果集,仅使用用于提取下一行集的选项。 另一方面,基于屏幕的应用程序可以利用 SQLFetchScroll 的所有功能。 如果应用程序将行集大小设置为屏幕上显示的行数并将屏幕缓冲区绑定到结果集,则可以将滚动条作直接转换为对 SQLFetchScroll 的调用。
| 滚动条操作 | SQLFetchScroll 滚动选项 |
|---|---|
| 向上翻页 | SQL_FETCH_PRIOR |
| 下一页 | SQL_FETCH_NEXT |
| 排队 | SQL_FETCH_RELATIVE 中 FetchOffset 等于 -1 |
| 线路中断 | SQL_FETCH_RELATIVE FetchOffset 等于 1 |
| 顶部的滚动框 | SQL_FETCH_FIRST |
| 底部的滚动框 | SQL_FETCH_LAST |
| 随机滚动框位置 | SQL_FETCH_ABSOLUTE |
此类应用程序还需要在滚动操作后定位滚动框,这需要当前行号和行数。 对于当前行号,应用程序可以跟踪当前行号,也可以使用 SQL_ATTR_ROW_NUMBER 属性调用 SQLGetStmtAttr 来检索它。
游标中的行数(即结果集的大小)可用作诊断标头的SQL_DIAG_CURSOR_ROW_COUNT字段。 仅当调用 SQLExecute、 SQLExecDirect 或 SQLMoreResult 后,才会定义此字段中的值。 此计数可以是近似计数,也可以是确切计数,具体取决于驱动程序的功能。 可以通过调用SQLGetInfo,使用游标属性信息类型,并检查是否返回了SQL_CA2_CRC_APPROXIMATE或SQL_CA2_CRC_EXACT位来确定驱动程序对游标类型的支持。
动态游标永远不会支持确切的行计数。 对于其他类型的游标,驱动程序可以支持确切的或近似的行计数,但不能同时支持这两者。 如果驱动程序不支持特定游标类型的确切行计数和近似行计数,则SQL_DIAG_CURSOR_ROW_COUNT字段包含到目前为止已提取的行数。 不论驱动程序支持哪些功能,SQLFetchScroll 函数使用 SQL_FETCH_LAST 操作码 将导致 SQL_DIAG_CURSOR_ROW_COUNT 字段包含确切的行数。