Функция JetSetColumn
Применимо к: Windows | Windows Server
Функция JetSetColumn
Функция JetSetColumn изменяет значение одного столбца в измененной записи для вставки или обновления текущей записи. Он может перезаписать существующее значение, добавить новое значение в последовательность значений в столбце с несколькими значениями, удалить значение из последовательности значений в столбце с несколькими значениями или обновить все или часть длинного значения, столбец типа JET_coltypLongText или JET_coltypLongBinary.
JET_ERR JET_API JetSetColumn(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_COLUMNID columnid,
__in_opt const void* pvData,
__in unsigned long cbData,
__in JET_GRBIT grbit,
__in_opt JET_SETINFO* psetinfo
);
Параметры
sesid
Сеанс, используемый для этого вызова.
tableid
Курсор, используемый для этого вызова.
columnid
JET_COLUMNID извлекаемого столбца. Кроме того, можно задать значение columnid , равное 0 (ноль). Если задано значение columnid 0 (ноль), все помеченные столбцы, разреженные и многозначные столбцы рассматриваются как один столбец. Это упрощает получение всех разреженных столбцов, присутствующих в записи.
pvData
Входной буфер, содержащий данные, используемые для значения столбца.
cbData
Размер входного буфера в байтах.
grbit
Группа битов, содержащая параметры, которые будут использоваться для этого вызова, которые включают ноль или более следующих элементов:
Значение |
Значение |
---|---|
JET_bitSetAppendLV |
Этот параметр используется для добавления данных в столбец типа JET_coltypLongText или JET_coltypLongBinary. Такого же поведения можно достичь, определив размер существующего длинного значения и указав ibLongValue в psetinfo. Однако использовать этот гбит проще, так как знать размер существующего значения столбца не требуется. |
JET_bitSetOverwriteLV |
Этот параметр используется для замены существующего значения long новыми данными. Если этот параметр используется, это так, как если бы существующее значение long было задано в 0 (ноль) длины перед установкой новых данных. |
JET_bitSetRevertToDefaultValue |
Этот параметр применим только для столбцов с тегами, разреженных или многозначных столбцов. Это приводит к тому, что столбец возвращает значение столбца по умолчанию при последующих операциях извлечения столбцов. Удаляются все существующие значения столбцов. |
JET_bitSetSeparateLV |
Этот параметр используется для принудительного хранения длинного значения столбцов типа JET_coltypLongText или JET_coltypLongBinary отдельно от остальных данных записи. Обычно это происходит, когда размер длинного значения не позволяет сохранить его с оставшимися данными записи. Однако этот параметр можно использовать для принудительного хранения значения long отдельно. Обратите внимание, что длинные значения размером четыре байта меньшего размера не могут быть принудительно разделены. В таких случаях параметр игнорируется. |
JET_bitSetSizeLV |
Этот параметр используется для интерпретации входного буфера как целочисленного числа байтов, устанавливаемого в качестве длины длинного значения, описанного заданным columnid , и , если он указан, порядковый номер в psetinfo-itagSequence>. Если заданный размер больше существующего значения столбца, столбец будет расширен на 0. Если размер меньше существующего значения столбца, значение будет усечено. |
JET_bitSetUniqueMultiValues |
Этот параметр используется для обеспечения того, чтобы все значения в столбце с несколькими значениями были уникальными. Этот параметр сравнивает данные исходного столбца без каких-либо преобразований с другими существующими значениями столбцов, и при обнаружении дубликата возвращается ошибка. Если этот параметр задан, JET_bitSetAppendLV, JET_bitSetOverwriteLV и JET_bitSetSizeLV также нельзя. |
JET_bitSetUniqueNormalizedMultiValues |
Этот параметр используется для обеспечения того, чтобы все значения в столбце с несколькими значениями были уникальными. Этот параметр сравнивает нормализованное преобразование ключей данных столбца с другими аналогичными преобразованными существующими значениями столбцов, и при обнаружении дубликата возвращается ошибка. Если этот параметр задан, JET_bitSetAppendLV, JET_bitSetOverwriteLV и JET_bitSetSizeLV также нельзя. |
JET_bitSetZeroLength |
Этот параметр используется для установки значения нулевой длины. Как правило, значение столбца равно NULL путем передачи cbMax 0 (ноль). Однако для некоторых типов, таких как JET_coltypText, значение столбца может иметь длину 0 (ноль) вместо NULL, и этот параметр используется для различения значений NULL и 0 (ноль). Примечание Как правило, если столбец является столбцом фиксированной длины, этот бит игнорируется, а для столбца устанавливается значение NULL. Однако если столбец является столбцом с тегом фиксированной длины, длина столбца устанавливается равным 0. Если столбец с тегами фиксированной длины имеет длину 0, попытка получить столбец с помощью JetRetrieveColumn или JetRetrieveColumns будет успешной, но фактическая длина, возвращаемая в параметре cbActual , равна 0. |
JET_bitSetIntrinsicLV |
Этот параметр используется для хранения всего длинного значения в записи. |
JET_bitSetCompressed |
Этот параметр используется для попытки сжатия данных при хранении данных. Windows 7: JET_bitSetCompressed появилась в Windows 7. |
JET_bitSetUncompressed |
Этот параметр не используется при попытке сжатия при хранении данных. Windows 7: JET_bitSetUnCompressed появилась в Windows 7. |
psetinfo
Указатель на необязательные входные параметры, которые можно задать для этой функции с помощью структуры JET_SETINFO .
Если psetinfo задано как NULL , то функция ведет себя так, как будто задано значение itagSequence 1 и значение ibLongValue 0 (ноль). Это приводит к тому, что столбец задает первое значение многозначного столбца и задает длинные данные, начинающиеся со смещением 0 (ноль).
Для этого параметра можно задать следующие параметры:
Значение |
Значение |
---|---|
ibLongValue |
Двоичное смещение в длинное значение столбца, с которого должны начинаться заданные данные. |
itagSequence |
Порядковый номер требуемого многозначного значения столбца для задания. Если параметр itagSequence имеет значение 0 (ноль), то указанное значение должно быть добавлено в конец последовательности многозначных значений. Если указанный порядковый номер больше, чем последнее существующее многозначное значение, то снова данное значение добавляется в конец последовательности значений. Если порядковый номер соответствует существующему значению, то это значение заменяется заданным значением. |
Возвращаемое значение
Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.
Код возврата |
Описание |
---|---|
JET_errSuccess |
Операция выполнена успешно. |
JET_errBadColumnId |
Указанный идентификатор столбца выходит за юридические рамки идентификатора столбца. |
JET_errClientRequestToStopJetService |
Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService. |
JET_errColumnNotFound |
Столбец, описываемый заданным идентификатором столбца, не существует в таблице. |
JET_errColumnNotUpdatable |
Была предпринята недопустимая попытка обновить длинное значение во время операции вставки копирования удаления исходного обновления. |
JET_errColumnTooBig |
Заданные значения столбца, заданные во входном буфере, превышают ограничение размера либо естественное для столбца фиксированной длины, либо настроенное для текстового или двоичного столбца с фиксированной длиной. Эта ошибка также возвращается при передаче более 1024 байт данных для длинного столбца и установке флага JET_bitSetIntrinsicLV. |
JET_errInstanceUnavailable |
Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных. Windows XP: Эта ошибка будет возвращена только в Windows XP и более поздних выпусках. |
JET_errInvalidBufferSize |
Размер данных заданного значения столбца не соответствует естественному для типа данных фиксированной длины. |
JET_errInvalidColumnType |
Предпринята недопустимая попытка обновить столбец с автоматическим увеличением либо во время операции вставки или обновления, либо обновить столбец версии во время операции замены. |
JET_errInvalidgrbit |
Указанные параметры неизвестны или являются недопустимым сочетанием известных битовых параметров. |
JET_errInvalidParameter |
Указанный объект psetinfo-cbStruct> не является допустимым размером для структуры JET_SETINFO . |
JET_errMultiValuedDuplicate |
Операция задания столбца попыталась создать повторяющееся значение и указала JET_bitSetUniqueMultiValues или JET_bitSetUniqueNormalizedMultiValues. |
JET_errNotInitialized |
Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован. |
JET_errNotInTransaction |
Была предпринята недопустимая попытка обновить значение длинного столбца, когда сеанс вызова не был в транзакции. |
JET_errNullInvalid |
Предпринята недопустимая попытка задать для столбца, отличного от NULL, значение NULL. |
JET_errColumnIllegalNull |
То же, что и JET_errNullInvalid. |
JET_errRecordTooBig |
Не удалось задать значение столбца во входном буфере, так как это привело бы к превышению ограничения размера страницы, связанного с записью. Столбцы типа JET_coltypLongText или JET_coltypLongBinary можно хранить отдельно от оставшихся данных записи. Однако другие столбцы должны храниться вместе с записью, что может привести к превышению ограничения на размер записи. Даже для длинных столбцов требуется 5 байтов пространства в записи в качестве компоновки, и это также может привести к JET_errRecordTooBig возврату. |
JET_errRestoreInProgress |
Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом. |
JET_errSessionSharingViolation |
Один и тот же сеанс нельзя использовать для нескольких потоков одновременно. Windows XP: Эта ошибка будет возвращена только в Windows XP и более поздних выпусках. |
JET_errTermInProgress |
Невозможно завершить операцию, так как экземпляр, связанный с сеансом, завершает работу. |
JET_errUpdateNotPrepared |
Курсор в настоящее время не находится в процессе вставки новой записи или обновления существующей записи. |
JET_errVersionStoreOutOfMemory |
Эта ошибка возникает, если настроенного размера хранилища версий недостаточно для хранения всех невыполненных обновлений. |
JET_wrnColumnMaxTruncated |
Значение столбца во входном буфере превысило максимальную длину, настроенную для столбца переменной длины, и было усечено. |
При успешном выполнении задана требуемая часть значения столбца для заданного столбца с данными, скопированными из входного буфера. Набор данных может быть усечен, если он превысил максимальную длину, указанную для столбца переменной длины.
При сбое расположение курсора остается без изменений, а данные о значении столбца не обновляются в буфере копирования.
Комментарии
Установка длинных значений, значений для столбцов JET_coltypLongBinary типа JET_coltypLongText или JET_coltypLongBinary должна выполняться только в том случае, если вызывающий сеанс находится в транзакции. Если вызывающий сеанс не находится в транзакции, изменения длинных значений, которые хранятся отдельно, могут быть полностью зафиксированы даже при последующей отмене операции обновления. Если вызывающий сеанс находится в транзакции, последствия обновления можно полностью откатить, отменив обновление и откатив транзакцию сеанса.
Обновления индекса не выполняются в результате операций JetSetColumn . Вместо этого индексы обновляются только после завершения всех изменений столбцов и вызова JetUpdate . Это позволяет наиболее эффективно обновлять индексы, когда индексы включают изменение нескольких столбцов.
Размер записи ограничен в зависимости от размера страницы базы данных. Любые длинные значения в записи размером более пяти байт будут храниться отдельно от записи, если данные в записи превышают предел в результате операции JetSetColumn . Ошибка JET_errRecordTooBig будет возвращена только после того, как все данные столбца отдельных записей будут сохранены отдельно от записи и запись по-прежнему превышает предельный размер записи.
Требования
Требование | Значение |
---|---|
Клиент |
Требуется Windows Vista, Windows XP или Windows 2000 Professional. |
Сервер |
Требуется Windows Server 2008, Windows Server 2003 или Windows 2000 Server. |
Верхняя часть |
Объявлено в Esent.h. |
Библиотека |
Используйте ESENT.lib. |
DLL |
Требуется ESENT.dll. |
См. также:
JET_COLUMNID
JET_ERR
JET_SESID
JET_TABLEID
JET_SETINFO
JetRetrieveColumn
JetSetColumns