Функция JetUpdate

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

Функция JetUpdate

Функция JetUpdate выполняет операцию обновления, включая вставку новой строки в таблицу или обновление существующей строки. Удаление строки таблицы выполняется путем вызова JetDelete.

JetUpdate — это последний шаг при выполнении вставки или обновления. Обновление начинается путем вызова JetPrepareUpdate , а затем путем вызова JetSetColumn или JetSetColumns один или несколько раз, чтобы задать состояние записи. Наконец, Для завершения операции обновления вызывается JetUpdate . Индексы обновляются только JetUpdate или JetUpdate2, а не во время JetSetColumn или JetSetColumns.

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

Параметры

sesid

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

tableid

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

pvBookmark

Указатель на возвращенную закладку для вставленной строки.

cbBookmark

Размер буфера, на который указывает pvBookmark.

pcbActual

Возвращенный размер закладки для вставленной строки, возвращенной в pvBookmark.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errBufferTooSmall

Заданный буфер для закладки записи недостаточно велик для хранения закладки записи.

JET_errClientRequestToStopJetService

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

JET_errColumnIllegalNull

То же, что и JET_errNullInvalid.

JET_errDiskFull

Для операции обновления требуется увеличение файла базы данных или выделение файла журнала, но диск, на котором находится файл базы данных или ряд журналов, заполнен. Кроме того, файл базы данных находится на томе в формате FAT32, а файл базы данных уже равен 4GBytes, предел для каждого файла для FAT32.

JET_errInstanceUnavailable

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

Windows XP: эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errInvalidParameter

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

JET_errKeyDuplicate

Ключ индекса для этой записи является дубликатом другого ключа индекса для другой записи, уже в таблице, и индекс не допускает дубликатов.

JET_errKeyTruncated

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

JET_errMultiValuedIndexViolation

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

JET_errNotInitialized

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

JET_errNullInvalid

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

JET_errNullKeyDisallowed

Один или несколько индексов не позволяют использовать ключ NULL , а вставленное или обновленное состояние заменяемой записи нарушает это определенное ограничение.

JET_errRecordPrimaryChanged

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

Windows XP: эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errTermInProgress

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

JET_errTransReadOnly

Попытка обновления в области транзакции только для чтения является недопустимой. Транзакция только для чтения — это транзакция, которая была запущена с помощью вызова JetBeginTransaction2 с JET_bitTransactionReadOnly.

Windows XP: эта ошибка будет возвращена только в Windows XP и более поздних выпусках.

JET_errUpdateNotPrepared

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

JET_errVersionStoreOutOfMemory

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

JET_errWriteConflict

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

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

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

Remarks

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

Ограничения размера записей применяются JetSetColumn, а не в целом JetUpdate.

Важно понимать влияние выполнения большого количества операций обновления внутри одной транзакции. Каждое обновление базы данных должно отслеживаться ядром СУБД в хранилище версий. Хранилище версий содержит динамическую запись всех различных версий каждой записи или записи индекса в базе данных, которые можно увидеть всеми активными транзакциями. Эти версии используются для поддержки управления параллелизмом с несколькими версиями, используемым ядром СУБД для поддержки транзакций с помощью изоляции моментальных снимков. Когда ядро СУБД исчерпало ресурсы, используемые для хранения этих версий, оно больше не сможет принимать дальнейшие изменения до тех пор, пока некоторые транзакции не будут завершены, чтобы позволить восстановить эти ресурсы. Если подсистема находится в этом состоянии, все обновления завершаются сбоем с JET_errVersionStoreOutOfMemory. Ресурсы, доступные ядру СУБД для хранения этих версий, можно управлять с помощью JetSetSystemParameter с JET_paramMaxVerPages и JET_paramGlobalMinVerPages.

Требования

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

Клиент

Требуется 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
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
Системные параметры