Поделиться через


Функция JetDupCursor

Применимо к: Windows | Windows Server

Функция JetDupCursor

Функция JetDupCursor дублирует открытый курсор и возвращает дескриптор повторяющегося курсора. Если курсор, который был дублирован, был курсором только для чтения, то дублированный курсор также является курсором только для чтения. Любое состояние, связанное с построением ключа поиска или обновлением записи, не копируется в повторяющийся курсор. Кроме того, расположение исходного курсора не дублируется в повторяющийся курсор. Повторяющийся курсор всегда открывается в кластеризованном индексе, а его расположение всегда находится в первой строке таблицы.

    JET_ERR JET_API JetDupCursor(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out         JET_TABLEID* ptableid,
      __in          JET_GRBIT grbit
    );

Параметры

sesid

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

tableid

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

ptableid

Указатель на tableid.

grbit

Зарезервировано для последующего использования.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

JET_errNotInitialized

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

JET_errOutOfCursors

Нет доступных ресурсов курсора.

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

Один и тот же сеанс нельзя использовать одновременно для нескольких потоков. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

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

При успешном выполнении для ptableid устанавливается повторяющийся курсор.

В случае сбоя изменения не вносятся. Состояние tableid не изменяется.

Комментарии

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

Таблицы, открытые с помощью JetDupCursor , обычно должны закрываться с помощью JetCloseTable. Исключение из этого правила возникает, когда в транзакции вызывается JetDupCursor и выполняется откат транзакции (с помощью JetRollback). При откате транзакции курсор автоматически закрывается. В этом случае при закрытии таблицы с помощью JetCloseTable возникает ошибка.

Количество таблиц, которые можно открыть одновременно, напрямую зависит от JET_paramMaxOpenTables. Дополнительные сведения см. в разделе Системные параметры .

Требования

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

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Профессиональная.

Сервер

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

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

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

Библиотека

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

DLL

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

См. также:

JET_GRBIT
JET_SESID
JET_TABLEID
JetCloseTable
JetRollback
JetStopService
Системные параметры