Функция JetRetrieveColumns

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

Функция JetRetrieveColumns

Функция JetRetrieveColumns извлекает несколько значений столбцов из текущей записи в одной операции. Массив структур JET_RETRIEVECOLUMN используется для описания набора извлекаемых значений столбцов, а также для описания выходных буферов для каждого извлекаемого значения столбца.

    JET_ERR JET_API JetRetrieveColumns(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in_out_opt  JET_RETRIEVECOLUMN* pretrievecolumn,
      __in          unsigned long cretrievecolumn
    );

Параметры

sesid

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

tableid

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

pretrievecolumn

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

cretrievecolumn

Число JET_RETRIEVECOLUMN структур в массиве, заданное pretrievecolumn.

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

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

Код возврата

Описание

JET_errSuccess

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

JET_errBadItagSequence

В pretinfo-itagSequence> передано недопустимое значение последовательного номера столбца с несколькими значениями. Допустимые значения для порядковых номеров значений столбцов с несколькими значениями — 1 или больше. Значение 0 (ноль) является допустимым для этой функции, но недопустимо для JetRetrieveColumn.

JET_errBadColumnId

Указанный идентификатор столбца выходит за юридические рамки идентификатора столбца.

JET_errClientRequestToStopJetService

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

JET_errColumnNotFound

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

JET_errIndexTuplesCannotRetrieveFromIndex

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

JET_errInvalidBufferSize

В некоторых случаях буфер, заданный для извлекаемого столбца, должен быть достаточного размера, чтобы возвращать любое значение столбца. Например, обновляемые столбцы escrow корректируются таким образом, чтобы они соответствовали контексту транзакций вызывающего сеанса, и для этой корректировки требуется буфер, предоставленный вызывающим объектом. Если буфер недостаточно места, возвращается JET_errInvalidBufferSize и данные столбца вообще не возвращаются.

JET_errInvalidgrbit

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

JET_errInvalidParameter

Один или несколько заданных параметров неверны. Это может произойти, если retinfo.cbStruct меньше размера JET_RETINFO.

JET_errInstanceUnavailable

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

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

JET_errNoCurrentRecord

Курсор не располагается на записи. Это может произойти по различным причинам. Например, это произойдет, если курсор находится после последней записи в текущем индексе.

JET_errNotInitialized

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

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

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

JET_errTermInProgress

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

JET_wrnBufferTruncated

Не удалось получить значение всего столбца, так как заданный буфер меньше размера столбца.

При успешном выполнении данные столбцов и размер столбцов возвращаются в предоставленных буферах, описанных в массиве структур JET_RETRIEVECOLUMN . Если параметру itagSequence присвоено значение 0 (ноль), чтобы указать, что вместо данных столбца требуется число экземпляров поля с несколькими значениями, то количество экземпляров многозначного столбца возвращается в самом поле itagSequence . Каждая структура JET_RETRIEVECOLUMN имеет поле ошибки, содержащее предупреждения для полученного столбца. Если столбец имеет значение NULL , код ошибки будет иметь значение JET_wrnColumnNull.

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

Комментарии

JetRetrieveColumns поддерживает одну функцию, которую не поддерживает JetRetrieveColumn . Это возможность получить количество экземпляров многозначного столбца. Цель этой функции — разрешить приложению извлекать все значения столбца. Это можно сделать, сначала определив количество значений столбца. Затем их длину можно определить, вызвав JetRetrieveColumns еще раз с одной JET_RETRIEVECOLUMN структурой, выделенной для каждого значения, чтобы определить длину данных столбца. Это можно сделать путем передачи указателей NULLpvData с cbMax 0 (ноль) и получения длины столбца в cbActual. Третий и последний вызов можно выполнить с выделенной памятью для данных значения столбца.

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

Требования

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

Клиент

Требуется Windows Vista, Windows XP или Windows 2000 Professional.

Сервер

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

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

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

Библиотека

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

DLL

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

См. также:

JET_ERR
JET_SESID
JET_TABLEID
JET_RETRIEVECOLUMN
JetEnumerateColumns
JetRetrieveColumn
JetSetColumns