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