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


Функция JetUpdate2

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

Функция JetUpdate2

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

Windows Server 2003: JetUpdate2 представлен в Windows Server 2003.

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

    JET_ERR JET_API JetUpdate2(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual,
      __in            const JET_GRBIT grbit
    );

Параметры

sesid

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

tableid

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

pvBookmark

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

cbBookmark

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

pcbActual

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

grbit

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

Значение

Значение

JET_bitUpdateCheckESE97Compatibility

Этот флаг приводит к тому, что обновление возвращает ошибку, если обновление не было возможно в версии ESE для Windows 2000, в результате чего максимальное количество экземпляров столбцов с несколькими значениями в каждой записи было меньше, чем в более поздних версиях ESE. Это важно только для приложений, которые хотят реплицировать данные между приложениями, размещенными в Windows 2000, и приложениями, размещенными в Windows Server 2003 или более поздних версиях ESE. Это не должно быть обязательным для большинства приложений.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errBufferTooSmall

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

JET_errClientRequestToStopJetService

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

JET_errDiskFull

Операция обновления требует увеличения размера файла базы данных или выделения файла журнала, но диск, на котором находится файл базы данных или ряд журналов, заполнен. Кроме того, файл базы данных находится на томе в формате FAT32, а размер файла базы данных уже составляет 4 ГБ, что составляет ограничение на каждый файл для 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_errUpdateNotPrepared

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

JET_errWriteConflict

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

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

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

Комментарии

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

Дополнительные сведения см. в разделе Примечания в JetUpdate .

Требования

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

Клиент

Требуется Windows Vista.

Сервер

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

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

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

Библиотека

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

DLL

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

См. также:

JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns