JetGetCurrentIndex 函数
适用于: Windows |Windows Server
JetGetCurrentIndex 函数
JetGetCurrentIndex 函数确定给定游标的当前索引的名称。 此名称还用于稍后使用 JetSetCurrentIndex 重新选择该索引作为当前索引。 它还可用于使用 JetGetTableIndexInfo 发现该索引的属性。
JET_ERR JET_API JetGetCurrentIndex(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out JET_PSTR szIndexName,
__in unsigned long cchIndexName
);
参数
sesid
用于此调用的会话。
tableid
用于此调用的游标。
szIndexName
接收游标当前索引的名称的输出缓冲区。
cchIndexName
输出缓冲区的最大大小(以字符为单位)。
返回值
此函数返回具有以下返回代码之一 的JET_ERR 数据类型。 有关可能的 ESE 错误的详细信息,请参阅 可扩展存储引擎错误 和 错误处理参数。
返回代码 |
说明 |
---|---|
JET_errSuccess |
操作已成功完成。 |
JET_errClientRequestToStopJetService |
无法完成操作,因为由于调用 JetStopService,与会话关联的实例上的所有活动都已停止。 |
JET_errInstanceUnavailable |
无法完成该操作,因为与会话关联的实例遇到一个致命错误,该错误要求撤销对所有数据的访问以保护该数据的完整性。 此错误仅由 Windows XP 和更高版本返回。 |
JET_errNotInitialized |
无法完成操作,因为尚未初始化与会话关联的实例。 |
JET_errRestoreInProgress |
无法完成操作,因为正在与会话关联的实例上执行还原操作。 |
JET_errSessionSharingViolation |
同一会话不能同时用于多个线程。 此错误仅由 Windows XP 和更高版本返回。 |
JET_errTermInProgress |
无法完成操作,因为与会话关联的实例正在关闭。 |
JET_wrnBufferTruncated |
操作已成功完成,但输出缓冲区太小,无法接收整个索引名称。 输出缓冲区已填充了尽可能多的索引名称,适合。 如果输出缓冲区的长度至少为一个字符,则该输出缓冲区中的字符串将以 null 结尾。 注意 如果 cchIndexName 为零,则不会返回此错误。 有关详细信息,请参阅“备注”部分。 |
成功后,给定游标的当前索引的名称将在输出缓冲区中返回。 如果返回JET_wrnBufferTruncated,则输出缓冲区将包含所提供空间中容纳的索引名称。 如果输出缓冲区的长度至少为一个字符,则该缓冲区中返回的字符串将以 null 结尾。 不会更改数据库状态。
失败时,输出缓冲区的状态将未定义。 不会更改数据库状态。
备注
如果游标没有当前索引,则将返回一个空字符串。 当游标位于表的聚集索引上且未定义主索引时,可能会发生这种情况。 此索引称为表的顺序索引,没有定义。 在任何情况下,使用 JetSetCurrentIndex 将当前索引设置为空字符串都将选择聚集索引,而不考虑是否存在主索引定义。
此函数中存在一个在所有版本中都存在的重要 bug。 如果输出缓冲区太小,无法接收整个索引名称,并且输出缓冲区的长度至少为一个字符,则不会返回JET_wrnBufferTruncated。 将改为返回JET_errSuccess。 若要避免此问题,输出缓冲区的长度应始终至少为 JET_cbNameMost + 1 (65) 个字符。
要求
要求 | 值 |
---|---|
客户端 |
需要 Windows Vista、Windows XP 或 Windows 2000 Professional。 |
服务器 |
需要 Windows Server 2008、Windows Server 2003 或 Windows 2000 Server。 |
标头 |
在 Esent.h 中声明。 |
Library |
使用 ESENT.lib。 |
DLL |
需要ESENT.dll。 |
Unicode |
实现为 JetGetCurrentIndexW (Unicode) 和 JetGetCurrentIndexA (ANSI) 。 |
另请参阅
JET_ERR
JET_SESID
JET_TABLEID
JetGetTableIndexInfo
JetSetCurrentIndex