Функция JetGetBookmark

Область применения: Windows | Сервер Windows

Функция JetGetBookmark

Функция JetGetBookmark извлекает закладку для записи, связанной с записью индекса в текущей позиции курсора. Затем эту закладку можно использовать для перемещения курсора обратно в ту же запись с помощью JetGoToBookmark.

    JET_ERR JET_API JetGetBookmark(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbMax,
      __out_opt     unsigned long* pcbActual
    );

Параметры

sesid

Сеанс, используемый для этого вызова.

tableid

Курсор, используемый для этого вызова.

pvBookmark

Выходной буфер, получающий закладку.

cbMax

Максимальный размер выходного буфера в байтах.

pcbActual

Фактический размер закладки в байтах.

Если этот параметр имеет значение NULL , фактический размер закладки не будет возвращен.

Если выходной буфер слишком мал, фактический размер закладки будет возвращен. Это означает, что это число будет больше размера выходного буфера.

Возвращаемое значение

Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделе "Расширяемые ошибки подсистемы служба хранилища" и "Параметры обработки ошибок".

Код возврата

Описание

JET_errSuccess

Операция выполнена успешно.

JET_errBufferTooSmall

Операция завершилась успешно, но выходной буфер слишком мал, чтобы получить всю закладку. Выходной буфер заполнен как можно большей частью закладки. При запросе также возвращается фактический размер закладки.

JET_errClientRequestToStopJetService

Операция не может завершиться, так как все действия в экземпляре, связанном с сеансом, прекратились в результате вызова JetStopService.

JET_errInstanceUnavailable

Операция не может завершиться, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных.

Windows XP: возвращаемые значения представлены в Windows XP.

JET_errNoCurrentRecord

Курсор не располагается на записи. Это может произойти по различным причинам. Например, это произойдет, если курсор расположен после последней записи в текущем индексе.

JET_errNotInitialized

Операция не может завершиться, так как экземпляр, связанный с сеансом, еще не инициализирован.

JET_errRestoreInProgress

Операция не может завершиться, так как операция восстановления выполняется на экземпляре, связанном с сеансом.

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать для нескольких потоков одновременно.

Windows XP: это возвращаемое значение представлено в Windows XP.

JET_errTermInProgress

Операция не может завершиться, так как завершается работу экземпляра, связанного с сеансом.

Если эта функция выполнена успешно, закладка для записи, связанной с записью индекса в текущей позиции курсора, будет возвращена в выходном буфере. Изменение состояния базы данных не произойдет.

Если эта функция завершается ошибкой, состояние выходного буфера и фактический размер закладки будет неопределенным, если не было возвращено JET_errBufferTooSmall. В случае возврата JET_errBufferTooSmall выходной буфер будет содержать столько закладки, сколько будет соответствовать указанному пространству, а фактический размер закладки будет точным. Изменение состояния базы данных не произойдет.

Remarks

Закладки обычно следует рассматривать как непрозрачные фрагменты данных. Попытка использовать внутреннюю структуру этих данных не должна. Однако для всех закладок ESENT выполняются следующие условия:

  • Закладка однозначно идентифицирует запись в данной таблице.

  • Закладка записи не изменится на время существования этой записи.

  • Закладка записи совпадает с ключом этой записи в первичном индексе таблицы, содержащей ее. Если в этой таблице не определен первичный индекс, ядро СУБД создаст собственную закладку для записи.

  • Закладки можно сравнивать друг с другом с помощью функции memcmp , чтобы установить их относительный порядок в основном индексе по таблице исходных записей. Если в этой таблице не определен первичный индекс, то не имеет смысла использовать относительное упорядочение закладок из этой таблицы.

  • Не имеет смысла сравнивать закладки записей из разных таблиц друг с другом.

  • Закладка всегда меньше JET_cbBookmarkMost (256) байтов до Windows Vista.

Windows Vista: в Windows Vista и более поздних выпусках закладки могут превышать JET_cbBookmarkMost (256) байт. Максимальный размер закладки равен текущему значению JET_paramKeyMost + 1.

Требования

Требование Значение

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Server

Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server.

Верхняя часть

Объявлен в Esent.h.

Библиотека

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

DLL

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

См. также:

JET_ERR
JET_SESID
JET_TABLEID
JetGoToBookmark
JetStopService
memcmp