Функция JetRetrieveColumn
Применимо к: Windows | Windows Server
Функция JetRetrieveColumn
Функция JetRetrieveColumn извлекает значение одного столбца из текущей записи. Запись — это запись, связанная с записью индекса в текущей позиции курсора. Кроме того, эта функция может получить столбец из записи, создаваемой в буфере копирования курсоров. Эта функция также может получать данные столбца из записи индекса, которая ссылается на текущую запись. Помимо получения фактического значения столбца, можно также использовать JetRetrieveColumn для получения размера столбца, прежде чем получать данные самого столбца, чтобы буферы приложений могли иметь соответствующий размер.
JET_ERR JET_API JetRetrieveColumn(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in JET_COLUMNID columnid,
__out_opt void* pvData,
__in unsigned long cbData,
__out_opt unsigned long* pcbActual,
__in JET_GRBIT grbit,
__in_out_opt JET_RETINFO* pretinfo
);
Параметры
sesid
Сеанс, используемый для этого вызова.
tableid
Курсор, используемый для этого вызова.
columnid
JET_COLUMNID извлекаемого столбца.
Можно задать значение columnid , равное 0 (ноль), которое само по себе не ссылается ни на один отдельный столбец. Если задано значение columnid 0 (ноль), все столбцы с тегами, разреженные и многозначные столбцы обрабатываются как один столбец. Это упрощает извлечение всех разреженных столбцов, присутствующих в записи.
pvData
Выходной буфер, получающий значение столбца.
cbData
Максимальный размер выходного буфера в байтах.
pcbActual
Получает фактический размер (в байтах) значения столбца.
Если этот параметр имеет значение NULL, фактический размер значения столбца не возвращается.
grbit
Группа битов, содержащая параметры, которые будут использоваться для этого вызова, которые включают ноль или более следующих элементов:
Значение |
Значение |
---|---|
JET_bitRetrieveCopy |
Этот флаг приводит к получению столбца измененного значения вместо исходного. Если значение не было изменено, извлекается исходное значение. Таким образом, значение, которое еще не было вставлено или не обновлено, может быть получено во время вставки или обновления записи. |
JET_bitRetrieveFromIndex |
Этот параметр используется для получения значений столбцов из индекса, если это возможно, без доступа к записи. Таким образом, можно избежать ненужной загрузки записей, если необходимые данные доступны из самих записей индекса. В случаях, когда исходное значение столбца не удается получить из индекса из-за необратимых преобразований или усечения данных, доступ к записи будет осуществляться, а данные извлекаются в обычном режиме. Это параметр производительности, который следует указывать только в том случае, если вероятно, что значение столбца можно извлечь из индекса. Этот параметр не следует указывать, если текущий индекс является кластеризованным, так как записи индекса для кластеризованного или первичного индекса являются записями. Этот бит нельзя задать, если также задано JET_bitRetrieveFromPrimaryBookmark. |
JET_bitRetrieveFromPrimaryBookmark |
Этот параметр используется для получения значений столбцов из закладки индекса и может отличаться от значения индекса, если столбец отображается как в основном, так и в текущем индексе. Этот параметр не следует указывать, если текущий индекс является кластеризованным или первичным индексом. Этот бит нельзя задать, если также задано JET_bitRetrieveFromIndex. |
JET_bitRetrieveTag |
Этот параметр используется для получения порядкового номера значения многозначного столбца в pretinfo-itagSequence>. Поле itagSequence обычно является входными данными для получения значений столбцов с несколькими значениями из записи. Однако при получении значений из индекса также можно связать запись индекса с определенным порядковым номером и получить этот порядковый номер. Получение порядкового номера может быть дорогостоящей операцией, и ее следует выполнять только при необходимости. |
JET_bitRetrieveNull |
Этот параметр используется для получения значений NULL в столбце с несколькими значениями. Если этот параметр не указан, значения NULL столбца с несколькими значениями будут автоматически пропущены. |
JET_bitRetrieveIgnoreDefault |
Этот параметр влияет только на столбцы с несколькими значениями и приводит к возврату значения NULL , если запрошенный порядковый номер равен 1, а для столбца в записи нет заданных значений. |
JET_bitRetrieveLongId |
Этот флаг предназначен только для внутреннего использования и не предназначен для использования в приложении. |
JET_bitRetrieveLongValueRefCount |
Этот флаг предназначен только для внутреннего использования и не предназначен для использования в приложении. |
JET_bitRetrieveTuple |
Этот флаг позволяет получить сегмент кортежа индекса. Этот бит необходимо указать с помощью JET_bitRetrieveFromIndex. |
pretinfo
Если параметр pretinfo имеет значение NULL , функция ведет себя так, как если бы было задано значение itagSequence 1 и значение ibLongValue 0 (ноль). Это приводит к получению столбца первого значения многозначного столбца и получению длинных данных со смещением 0 (ноль).
Этот параметр используется для предоставления одного или нескольких из следующих компонентов:
Значение |
Значение |
---|---|
ibLongValue |
Возвращает двоичное смещение в значение длинного столбца при извлечении части значения столбца. |
itagSequence |
Задает порядковый номер нужного значения столбца с несколькими значениями. Обратите внимание, что это поле задается только в том случае, если указано JET_bitRetrieveTag. В противном случае он не будет изменен. |
columnidNextTagged |
Возвращает идентификатор столбца возвращаемого значения столбца при получении всех столбцов с тегами, разреженных и многозначных столбцов с использованием передачи columnid 0 (ноль). |
Возвращаемое значение
Эта функция возвращает тип данных JET_ERR с одним из следующих кодов возврата. Дополнительные сведения о возможных ошибках ESE см. в разделах Ошибки подсистемы расширяемого хранилища и Параметры обработки ошибок.
Код возврата |
Описание |
---|---|
JET_errSuccess |
Операция выполнена успешно. |
JET_errBadColumnId |
Указанный идентификатор столбца выходит за пределы идентификатора столбца. |
JET_errBadItagSequence |
В pretinfo-itagSequence> передано недопустимое значение порядкового номера столбца с несколькими значениями. Допустимые значения для порядковых номеров значений столбцов с несколькими значениями — 1 или больше. Недопустимое значение 0 (ноль) для этой функции. |
JET_errClientRequestToStopJetService |
Невозможно выполнить операцию, так как все действия экземпляра, связанного с сеансом, прекратились в результате вызова JetStopService. |
JET_errColumnNotFound |
Столбец, описанный заданным columnid , не существует в таблице. |
JET_errIndexTuplesCannotRetrieveFromIndex |
Столбцы, индексированные как подстроки, не могут быть получены из индекса, так как в каждой записи индекса обычно присутствует только небольшая часть столбца. |
JET_errInstanceUnavailable |
Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, столкнулся с неустранимой ошибкой, требующей отмены доступа ко всем данным для защиты целостности этих данных. Эта ошибка будет возвращена только в Windows XP и более поздних выпусках. |
JET_errInvalidBufferSize |
В некоторых случаях буфер, заданный для извлекаемого столбца, должен быть достаточного размера, чтобы возвращать любое значение столбца. Например, обновляемые столбцы escrow корректируются таким образом, чтобы они соответствовали контексту транзакций вызывающего сеанса, и для этой корректировки требуется буфер, предоставленный вызывающим объектом. Если буфер недостаточно места, возвращается JET_errInvalidBufferSize и данные столбца вообще не возвращаются. |
JET_errInvalidParameter |
Один или несколько заданных параметров неверны. Это может произойти, если retinfo.cbStruct меньше размера JET_RETINFO. |
JET_errInvalidgrbit |
Указанные параметры неизвестны или являются недопустимым сочетанием известных битовых параметров. |
JET_errNoCurrentRecord |
Курсор не располагается на записи. Это может произойти по различным причинам. Например, это произойдет, если курсор находится после последней записи в текущем индексе. |
JET_errNotInitialized |
Невозможно выполнить операцию, так как экземпляр, связанный с сеансом, еще не инициализирован. |
JET_errRestoreInProgress |
Невозможно выполнить операцию, так как операция восстановления выполняется в экземпляре, связанном с сеансом. |
JET_errSessionSharingViolation |
Один и тот же сеанс нельзя использовать для нескольких потоков одновременно. Windows XP: Эта ошибка будет возвращена только в Windows XP и более поздних выпусках. |
JET_errTermInProgress |
Невозможно завершить операцию, так как экземпляр, связанный с сеансом, завершает работу. |
JET_wrnBufferTruncated |
Не удалось получить значение всего столбца, так как заданный буфер меньше размера столбца. |
JET_wrnColumnNull |
Полученное значение столбца равно NULL. |
При успешном выполнении значение столбца для заданного столбца копируется в заданный буфер. Меньше, чем все значения столбца копируются с предупреждением JET_wrnBufferTruncated возвращается. Если был задан pcbActual , возвращается фактический размер значения столбца. Обратите внимание, что значения NULL имеют длину 0 (ноль) и, таким образом, устанавливают для возвращаемого размера значение 0 (ноль). Если полученный столбец был столбцом с несколькими значениями и параметром pretinfo , а JET_bitReturnTag задан в качестве параметра, порядковый номер значения столбца возвращается в pretinfo-itagSequence>.
При сбое расположение курсора остается без изменений, а данные не копируются в предоставленный буфер.
Комментарии
Этот вызов используется только один раз для получения данных фиксированного или известного размера для столбцов, не являющихся многозначными. Однако если данные столбца неизвестного размера, этот вызов обычно используется дважды. Сначала он вызывается для определения размера данных, чтобы выделить необходимое дисковое пространство. Затем этот же вызов выполняется снова для получения данных столбца. Если фактическое количество значений неизвестно, так как столбец имеет многозначное значение, вызов обычно используется три раза. Сначала нужно получить количество значений, а затем дважды больше, чтобы выделить хранилище и получить фактические данные.
Получение всех значений для многозначного столбца можно выполнить, многократно вызывая эту функцию со значением pretinfo-itagSequence>, начинающимся с 1, и увеличиваясь при каждом последующем вызове. Известно, что последнее значение столбца извлекается при возврате JET_wrnColumnNull из функции. Обратите внимание, что этот метод не может быть выполнен, если в столбце с несколькими значениями явно заданы значения NULL в последовательности значений, так как эти значения будут пропущены. Если приложению требуется получить все значения столбцов с несколькими значениями, включая значения NULL, вместо JetRetrieveColumn следует использовать JetRetrieveColumns. Обратите внимание, что эта функция не возвращает число значений для функции с несколькими значениями, если задано значение itagSequence 0 (ноль). Только JetRetrieveColumns будет возвращать количество значений столбца при передаче значения itagSequence 0 (ноль).
Если эта функция вызывается на уровне транзакции 0 (ноль), например, вызывающий сеанс не находится в транзакции, то транзакция открывается и закрывается внутри функции. Цель этого — вернуть согласованные результаты в случае, если длинное значение охватывает страницы базы данных. Обратите внимание, что транзакция освобождается между вызовами функций, и ряд вызовов этой функции, когда сеанс не входит в транзакцию, может возвращать данные, обновленные после первого вызова этой функции.
Значение столбца по умолчанию будет получено, если для столбца не было явно задано другое значение, если не задан параметр JET_bitRetrieveIgnoreDefault.
Получение значения столбца с автоматическим приращением из буфера копирования перед вставкой является общим средством идентификации записи, уникальной для компоновки при вставке нормализованных данных в несколько таблиц. Значение автоинкремента выделяется при начале операции вставки и может быть извлечено из буфера копирования в любое время до завершения обновления.
При извлечении всех помеченных, многозначных и разреженных столбцов, задав columnid значение 0 (ноль), столбцы извлекаются в порядке columnid от самого низкого столбца до самого высокого значения columnid. Каждый раз при извлечении значений столбцов возвращается один и тот же порядок значений столбцов. Порядок детерминирован.
Требования
Требование | Значение |
---|---|
Клиент |
Требуется 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_RETINFO
JetSetColumn
JetRetrieveColumns