Функция JetPrepareUpdate

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

Функция JetPrepareUpdate

Функция JetPrepareUpdate является первой операцией при выполнении обновления для вставки новой записи или замены существующей записи новыми значениями. Обновления выполняется путем вызова JetPrepareUpdate, затем вызова JetSetColumn или JetSetColumns ноль или более раз и, наконец, путем вызова JetUpdate для завершения операции. JetPrepareUpdate и JetUpdate задают границы для операции обновления и имеют важное значение для того, чтобы в индексы было введено только окончательное состояние обновления записи. Это более эффективно, но и требуется в тех случаях, когда данные должны соответствовать допустимому состоянию через больше, чем при операции задания столбца.

Существует несколько различных вариантов вставки или замены записей, которые более подробно описаны ниже.

    JET_ERR JET_API JetPrepareUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          unsigned long prep
    );

Параметры

sesid

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

tableid

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

Подготовки

Параметры, которые можно использовать для подготовки к обновлению, включают следующие.

Значение

Значение

JET_prepCancel

Этот флаг приводит к отмене обновления для этого курсора в JetPrepareUpdate .

JET_prepInsert

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

JET_prepInsertCopy

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

JET_prepInsertCopyDeleteOriginal

Этот флаг заставляет курсор подготовиться к вставке той же записи, а также к удалению или исходной записи. Он используется в случаях изменения первичного ключа.

JET_prepReplace

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

JET_prepReplaceNoLock

Этот флаг похож на JET_prepReplace, но не блокируется, чтобы другие сеансы не обновляли эту запись. Вместо этого этот сеанс может получать JET_errWriteConflict при вызове JetUpdate для завершения обновления.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errAlreadyPrepared

Метод JetPrepareUpdate был вызван с допустимым флагом для подготовки, но не JET_prepCancel, а курсор уже был в подготовленном состоянии.

JET_errClientRequestToStopJetService

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

JET_errInstanceUnavailable

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

JET_errInvalidParameter

Данный флаг подготовки не является допустимым.

JET_errNotInitialized

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

JET_errNotInTransaction

Метод JetPrepareUpdate был вызван для замены записи со столбцами SLV. Столбцы SLV. Обратите внимание, что столбцы SLV не предназначены для общего использования. Эта функция используется для поддержки инфраструктуры Microsoft Exchange и не предназначена для использования в приложении.

JET_errRestoreInProgress

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

JET_errRollbackError

JetPrepareUpdate был вызван с JET_prepCancel, но не удалось откатить все изменения, внесенные в столбцы типа JET_coltypLongText и (или) столбцы типа JET_coltypLongBinary.

JET_errSessionSharingViolation

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

JET_errTermInProgress

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

JET_errUpdateNotPrepared

Метод JetPrepareUpdate был вызван с JET_prepCancel но курсор не находился в подготовленном состоянии.

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

При сбое состояние курсора остается без изменений. Если ошибка была JET_errRollbackError состояние курсора изменяется на не подготовленное, но не все изменения были отменены.

Комментарии

Вставка копии записи является важной оптимизацией при совместном использовании данных типа JET_coltypLongText и (или) JET_coltypLongBinary. Эти данные хранятся вне записи при большом размере, и несколько записей могут совместно использовать одно и то же физическое представление данных. В этом случае данные могут быть обновлены из любой записи, но это приведет к ускорению обработки данных, так что каждая запись имеет собственную копию. Невозможно изменить данные в одной записи путем изменения другой записи. Кроме того, невозможно заблокировать обновление одной записи путем обновления другой записи. Это центральная функция ESE, известная как блокировка на уровне записей.

Операции JetUpdate, которые завершаются сбоем, оставляют курсор в подготовленном к обновлению состоянии. Это позволяет исправить некоторые ошибки, такие как неправильное значение столбца, не требуя повторного создания состояния обновления. Это означает, что во всех случаях, когда курсор отказывается от обновления, он должен явно вызывать JetPrepareUpdate с JET_prepCancel.

Требования

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

Клиент

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

Сервер

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

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

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

Библиотека

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

DLL

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

См. также:

JET_ERR
JET_SESID
JET_TABLEID
JetRetrieveColumn
JetSetColumn
JetUpdate