Функция 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