JetSetIndexRange 函数

适用于: Windows |Windows Server

JetSetIndexRange 函数

JetSetIndexRange 函数暂时将游标可以使用 JetMove 走动的索引条目集限制为从当前索引项开始,并在索引条目处结束,该索引项与该游标中的搜索键指定的搜索条件和指定的绑定条件匹配。 以前必须使用 JetMakeKey 构造搜索键。

    JET_ERR JET_API JetSetIndexRange(
      __in          JET_SESID sesid,
    __in          JET_TABLEID tableidSrc,
      __in          JET_GRBIT grbit
    );

参数

sesid

用于此调用的会话。

tableidSrc

用于此调用的游标。

grbit

包含用于此调用的选项的一组位,其中包括以下零个或多个内容:

含义

JET_bitRangeInclusive

此选项是否存在表示索引范围的边界条件。 如果存在,此选项指示索引范围的限制是非独占的。 如果不存在,此选项指示索引范围的限制是排他性的。 如果索引范围的限制是非独占的,则与搜索条件完全匹配的任何索引条目都包含在范围中。

JET_bitRangeInstantDuration

此选项请求在建立索引范围后立即将其删除。 操作的所有其他方面保持不变。 这对于测试是否存在与搜索条件匹配的索引条目很有用。

JET_bitRangeRemove

此选项请求取消游标上的现有索引范围。 取消索引范围后,可以使用 JetMove 移动超出索引范围的末尾。 如果索引范围尚未生效, JetSetIndexRange 将失败并JET_errInvalidOperation。

指定此选项后,将忽略所有其他选项。

JET_bitRangeUpperLimit

如果使用此选项,则游标中的搜索键表示与索引范围匹配的索引末尾最接近的索引项的搜索条件。 索引范围将在游标的当前位置和此索引项之间建立,以便可以通过使用具有JET_MoveNext或正偏移量的 JetMove 在索引上前进来找到所有匹配项。

将此选项用于使用 JetMakeKey 构造的搜索键(使用通配符选项查找最接近索引开头的索引条目)没有意义。

如果省略此选项,则游标中的搜索键表示与索引范围匹配的索引开头最近的索引项的搜索条件。 索引范围将在游标的当前位置和此索引项之间建立,以便通过使用具有JET_MovePrevious或负偏移量的 JetMove 向后走动索引来找到所有匹配项。

省略此选项与使用 JetMakeKey 构造的搜索键没有意义,该选项使用通配符选项查找最接近索引末尾的索引条目。

返回值

此函数返回具有以下返回代码之一 的JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅 可扩展存储引擎错误错误处理参数

返回代码

说明

JET_errSuccess

操作已成功完成。

对于 JetSetIndexRange,这意味着现有索引范围已取消,或者索引范围内至少有一个索引项。

JET_errClientRequestToStopJetService

无法完成操作,因为由于调用 JetStopService,与会话关联的实例上的所有活动都已停止。

JET_errInstanceUnavailable

无法完成该操作,因为与会话关联的实例遇到一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。

此错误仅由 Windows XP 和更高版本返回。

JET_errInvalidOperation

当指定JET_bitRangeRemove并且没有有效的索引范围时, JetSetIndexRange 将返回此错误。

JET_errKeyNotMade

光标当前没有搜索键。 JetSetIndexRange 要求游标具有有效的搜索键,因为它会将它用于查找索引条目的搜索条件。

JET_errNoCurrentIndex

游标没有当前索引。 如果光标位于表的聚集索引上,则 JetSetIndexRange 将发生这种情况,但尚未定义主索引。 不支持在此类索引上设置索引范围。

JET_errNoCurrentRecord

JetSetIndexRange 将返回此错误,以指示索引范围内没有索引条目。

JET_errNotInitialized

无法完成操作,因为尚未初始化与会话关联的实例。

JET_errRestoreInProgress

无法完成操作,因为正在与会话关联的实例上执行还原操作。

JET_errSessionSharingViolation

同一会话不能同时用于多个线程。

此错误仅由 Windows XP 和更高版本返回。

JET_errTermInProgress

无法完成操作,因为与会话关联的实例正在关闭。

成功后,如果指定了JET_bitRangeRemove,则会取消当前有效的索引范围。 如果未指定JET_bitRangeRemove并且指定了JET_bitRangeInstantDuration,则没有有效的索引范围。 如果既未指定JET_bitRangeRemove,也未指定JET_bitRangeInstantDuration,则新的索引范围将生效。 此索引范围将暂时将游标可以使用 JetMove 走动的索引条目集限制为从当前索引项开始并在与搜索条件匹配的索引项处结束的索引条目集。 游标的位置将保持不变。 如果已为游标构造搜索键,则将删除该搜索键。 不会更改数据库状态。

失败时,如果未返回JET_errNoCurrentRecord,则表示没有有效的索引范围。 如果返回JET_errNoCurrentRecord,则新的索引范围生效。 此索引范围将暂时将游标可以使用 JetMove 走动的索引条目集限制为从当前索引项开始并在与搜索条件匹配的索引项处结束的索引条目集。 游标的位置将保持不变。 如果返回了JET_errNoCurrentRecord,并且已为游标构造了搜索键,则将删除该搜索键。 不会更改数据库状态。

备注

索引范围是可变的,如果对游标执行 除 JetMove 以外的任何导航,则会自动取消索引范围。

索引范围仅在一个方向上工作。 如果设置了上限,则在达到索引范围的末尾后,仅使用具有JET_MoveNext或正偏移的 JetMove 向前运动。 在这种情况下,仍可以使用具有JET_MovePrevious或负偏移量的 JetMove 离开索引范围。 对于下限,会出现类似的情况。

要求

要求

客户端

需要 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_GRBIT
JET_SESID
JET_TABLEID
JetMakeKey
JetMove
JetSetIndexRange
JetStopService