Функция SQLGetDescRec

Соответствие
Введенная версия: Соответствие стандартам ODBC 3.0: ISO 92

Сводка
SQLGetDescRec возвращает текущие настройки или значения нескольких полей записи дескриптора. Возвращаемые поля описывают имя, тип данных и хранение столбцов или параметров.

Syntax

  
SQLRETURN SQLGetDescRec(  
      SQLHDESC        DescriptorHandle,  
      SQLSMALLINT     RecNumber,  
      SQLCHAR *       Name,  
      SQLSMALLINT     BufferLength,  
      SQLSMALLINT *   StringLengthPtr,  
      SQLSMALLINT *   TypePtr,  
      SQLSMALLINT *   SubTypePtr,  
      SQLLEN *        LengthPtr,  
      SQLSMALLINT *   PrecisionPtr,  
      SQLSMALLINT *   ScalePtr,  
      SQLSMALLINT *   NullablePtr);  

Arguments

DescriptorHandle
[Ввод] Дескрипторная ручка.

RecNumber
[Ввод] Указывает запись дескриптора, из которой приложение ищет информацию. Дескрипторные записи нумеруются начиная с 1, при этом запись 0 является записью закладки. Аргумент RecNumber должен быть меньше или равен значению SQL_DESC_COUNT. Если RecNumber меньше или равен SQL_DESC_COUNT, но строка не содержит данных для столбца или параметра, вызов SQLGetDescRec вернёт значения полей. (Для получения дополнительной информации см. раздел «Инициализация дескрипторных полей» в SQLSetDescField.)

Name
[Выход] Указатель на буфер, в котором возвращается поле SQL_DESC_NAME для записи дескриптора.

Если Name — NULL, StringLengthPtr всё равно вернёт общее количество символов (за исключением символа null-termination для данных символов), доступных для возврата в буфере, на который указывает Name.

BufferLength
[Ввод] Длина буфера *Имя , в символах.

StringLengthPtr
[Выход] Указатель на буфер, в котором возвращается количество символов данных, доступных для возврата в буфере *Name , за исключением символа null-termination. Если количество символов было больше или равно BufferLength, данные в *Name усекаются до BufferLength минус длина символа null-termination и заканчиваются драйвером.

TypePtr
[Выход] Указатель на буфер, в котором возвращается значение поля SQL_DESC_TYPE для записи дескриптора.

SubTypePtr
[Выход] Для записей, тип которых SQL_DATETIME или SQL_INTERVAL, это указатель на буфер, в котором возвращается значение поля SQL_DESC_DATETIME_INTERVAL_CODE.

LengthPtr
[Выход] Указатель на буфер для возврата значения поля SQL_DESC_OCTET_LENGTH для записи дескриптора.

PrecisionPtr
[Выход] Указатель на буфер, в котором возвращается значение поля SQL_DESC_PRECISION для записи дескриптора.

ScalePtr
[Выход] Указатель на буфер, в котором возвращается значение поля SQL_DESC_SCALE для записи дескриптора.

NullablePtr
[Выход] Указатель на буфер, в котором возвращается значение поля SQL_DESC_NULLABLE для записи дескриптора.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA или SQL_INVALID_HANDLE.

SQL_NO_DATA возвращается, если RecNumber превышает текущее количество дескрипторных записей.

SQL_NO_DATA возвращается, если DescriptorHandle — это дескриптор IRD, и оператор находится в состоянии подготовленного или выполненного, но открытого курсора с ним не связано.

Diagnostics

Когда SQLGetDescRec возвращает SQL_ERROR или SQL_SUCCESS_WITH_INFO, соответствующее значение SQLSTATE можно получить, вызвав SQLGetDiagRec с HandleType SQL_HANDLE_DESC и HandleDescriptorHandle. В следующей таблице перечислены значения SQLSTATE, обычно возвращаемые SQLGetDescRec , и каждое из них объясняется в контексте этой функции; обозначение «(DM)» предшествует описаниям SQLSTATE, возвращаемым менеджером драйверов. Возвращаемый код, связанный с каждым значением SQLSTATE, SQL_ERROR, если не указано иное.

SQLSTATE Error Description
01000 Общее предупреждение Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
01004 Строковые данные, усеченные справа Буфер *Name был недостаточно велик, чтобы вернуть всё поле описания. Поэтому поле было сокращено. Длина неусечённого дескрипторного поля возвращается в *StringLengthPtr. (Функция возвращает SQL_SUCCESS_WITH_INFO.)
07009 Индекс некорректного дескриптора Аргумент FieldIdentifier был полем записи, аргумент RecNumber был установлен как 0, а аргумент DescriptorHandle — IPD-дескриптором.

(DM) Аргумент RecNumber был установлен в 0, атрибут оператора SQL_ATTR_USE_BOOKMARKS — в SQL_UB_OFF, а аргумент DescriptorHandle был дескриптом IRD.

Аргумент RecNumber был меньше 0.
08S01 Сбой связи Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции.
HY000 Общая ошибка Произошла ошибка, для которой не было определенного SQLSTATE и для которого не было определено значение SQLSTATE для конкретной реализации. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину.
HY001 Ошибка выделения памяти Драйвер не смог выделить память, необходимую для выполнения или завершения функции.
HY007 Связанная инструкция не подготовлена DescriptorHandle был связан с IRD, и связанный оператор не находился в состоянии подготовленного или выполненного.
HY010 Ошибка последовательности функций (DM) DescriptorHandle был связан с StatementHandle , для которого вызывалась асинхронно выполняющаяся функция (не эта), которая всё ещё выполнялась во время вызова этой функции.

(DM) DescriptorHandle был связан с StatementHandle , для которого вызывался и возвращался SQL_NEED_DATA SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos . Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов.

(DM) Для дескриптора соединения, связанного с DescriptorHandle, была вызвана асинхронно выполняющаяся функция. Эта асинхронная функция всё ещё выполнялась, когда был вызван SQLGetDescRec .
HY013 Ошибка управления памятью Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти.
HY117 Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function.
HYT01 Время ожидания для подключения истекло Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Драйвер не поддерживает эту функцию (DM) Драйвер, связанный с DescriptorHandle , не поддерживает эту функцию.

Comments

Приложение может вызвать SQLGetDescRec для получения значений следующих полей дескриптора для одного столбца или параметра:

  • SQL_DESC_NAME

  • SQL_DESC_TYPE

  • SQL_DESC_DATETIME_INTERVAL_CODE (для записей, тип которых SQL_DATETIME или SQL_INTERVAL)

  • SQL_DESC_OCTET_LENGTH

  • SQL_DESC_PRECISION

  • SQL_DESC_SCALE

  • SQL_DESC_NULLABLE (SQL: возможность значения NULL)

SQLGetDescRec не получает значения для заголовочных полей.

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

Когда приложение вызывает SQLGetDescRec для получения значения поля, не определённого для определённого типа дескриптора, функция возвращает SQL_SUCCESS, но возвращаемое значение для поля неопределённо. Например, вызов SQLGetDescRec для SQL_DESC_NAME или SQL_DESC_NULLABLE поля APD или ARD вернёт SQL_SUCCESS неопределенное значение для поля.

Когда приложение вызывает SQLGetDescRec для получения значения поля, определённого для определённого типа дескриптора, но не имеющего значения по умолчанию и ещё не установленного, функция возвращает SQL_SUCCESS, но значение для этого поля не определённо. Для получения дополнительной информации см. раздел «Инициализация дескрипторных полей» в SQLSetDescField.

Значения полей также можно получить отдельно с помощью вызова SQLGetDescField. Для описания полей в заголовке или записи дескриптора см. SQLSetDescField. Дополнительные сведения о дескрипторах см. в разделе "Дескрипторы".

Сведения о Смотри
Переплетывание колонны Функция SQLBindCol
Связывание параметра Параметрическая функция SQLBindParameter
Получение дескрипторного поля Функция SQLGetDescField
Установка нескольких полей дескрипторов Функция SQLSetDescRec