Функция 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
Системные параметры