Функция 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 будет выбран кластеризованный индекс независимо от наличия определения первичного индекса.

В этой функции есть важная ошибка, которая присутствует во всех выпусках. Если выходной буфер слишком мал для получения всего имени индекса, а выходной буфер имеет длину хотя бы одного символа, 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.

Библиотека

Используйте ESENT.lib.

DLL

Требуется ESENT.dll.

Юникод

Реализовано как JetGetCurrentIndexW (Юникод) и JetGetCurrentIndexA (ANSI).

См. также:

JET_ERR
JET_SESID
JET_TABLEID
JetGetTableIndexInfo
JetSetCurrentIndex