JetIndexRecordCount 函数
适用于: Windows |Windows Server
JetIndexRecordCount 函数
JetIndexRecordCount 函数从当前位置对当前索引中的条目数进行计数。 当前位置包含在计数中。 如果当前索引位于多值列上,并且该列的实例具有多个值,则计数可能大于表中记录总数。 如果表为空,则计数将返回 0。
JET_ERR JET_API JetIndexRecordCount(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out unsigned long* pcrec,
__in unsigned long crecMax
);
参数
sesid
用于此调用的会话。
tableid
用于此调用的游标。
pcrec
指向要接收计数的无符号长值的指针。
crecMax
要计数的最大记录数。 crecMax 值为 0 表示计数不受限制。
返回值
此函数返回具有以下返回代码之一 的JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅 可扩展存储引擎错误 和 错误处理参数。
返回代码 |
说明 |
---|---|
JET_errSuccess |
操作已成功完成。 |
JET_errClientRequestToStopJetService |
由于调用 JetStopService,与会话关联的实例上的所有活动都已停止,因此操作无法完成。 |
JET_errInstanceUnavailable |
该操作无法完成,因为与会话关联的实例遇到一个致命错误,该错误要求撤销对所有数据的访问权限以保护该数据的完整性。 Windowsxp: 此返回值在 Windows XP 中引入。 |
JET_errNoCurrentRecord |
光标当前不在记录上,并且表不为空。 Windows XP、Windows Server 2003、Windows 2000 Server 和 Windows 2000 Professional: 如果光标位于空索引或索引范围上,则 JetIndexRecordCount 错误地返回JET_errNoCurrentRecord。 |
JET_errNotInitialized |
操作无法完成,因为与会话关联的实例尚未初始化。 |
JET_errRestoreInProgress |
该操作无法完成,因为正在对与会话关联的实例执行还原操作。 |
JET_errSessionSharingViolation |
同一会话不能同时用于多个线程。 Windowsxp: 此返回值在 Windows XP 中引入。 |
JET_errTermInProgress |
操作无法完成,因为正在关闭与会话关联的实例。 |
如果此函数成功,则会在 pcrec 指向的无符号长中返回确切数量的索引条目,包括当前位置和最高为 crecMax ((如果不是 0) )。
如果此函数失败,则不会对 precpos 中分配的内存进行更改。
备注
如果表不为空,则光标应定位在开始计数的记录上。 计数将包括此记录,并向前计数到 crecMax 中的给定限制。 如果 crecMax 为 0,则操作将继续计数,直到索引结束。
索引范围可用于构造计数的人为索引结束限制。 这样,就可以精确计算索引的子范围。 光标应定位到范围中的第一行。 应创建范围键的末尾,然后应使用 JetSetIndexRange 设置上限范围(包括独占或独占)。 最后,应调用 JetIndexRecordCount 来准确计算范围。
JetIndexRecordCount 遵循事务语义,并返回一个计数,该计数对于处于当前事务状态的此特定会话是准确的。
JetIndexRecordCount 访问索引叶页,以便准确统计条目。 因此,它可以执行大量的 I/O,并且可能很慢。 应使用 crecMax 限制来防止负载过大。 如果范围较大,则可以使用 JetGetRecordPosition 以近似方式对范围进行计数。
Windows XP、Windows Server 2003、Windows 2000 Server 和 Windows 2000 Professional: 如果游标位于空索引或索引范围上,则 JetIndexRecordCount 错误地返回JET_errNoCurrentRecord而不是返回零的记录计数。 在这种情况下,应用程序应检查以查看索引或索引范围是否为空。
要求
要求 | 值 |
---|---|
客户端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
服务器 |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
标头 |
在 Esent.h 中声明。 |
Library |
使用 ESENT.lib。 |
DLL |
需要ESENT.dll。 |
另请参阅
JET_ERR
JET_SESID
JET_TABLEID
JetGetRecordPosition
JetSetIndexRange
JetStopService