ODBC. Урок 4. Возвращаемые величины

Дата публикации 6 июн 2002

ODBC. Урок 4. Возвращаемые величины — Архив WASM.RU

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

  Мы назовём группу записей возвращаемых инструкцией - набором результатов. Общие шаги для получения установленного результата следующие:

  1. Определить доступен ли набор результатов.
  2. Связать множество столбцов результатов с переменными
  3. Выборка столбца

  Когда вы проанализируете набор результатов, вам нужно уничтожить его вызвав SQLCloseCursor.

ОПРЕДЕЛЕНИЕ ДОСТУПНОСТИ НАБОРА ТЕЗУЛЬТАТОВ

  Иногда как вы уже знаете в результате выполнения инструкции SQL создаётся набор результатов. Если инструкция SQL - не возвращает набора результатов, то естественно, что никакого доступна к ним быть не может. Тем не менее, иногда вы даже и не знаете, что возвращает инструкция SQL, это возникает тогда, когда вы позволяете пользователю вводить заказные инструкции SQL. В этом случае вы должны проверить был ли создан набор результатов вызовом SQLNumResultCols. Эта функция возвращает количество столбцов (полей) в наборе результатов (если они существуют) и имеет следующий синтаксис:

Код (Text):
  1.  
  2. SQLNumResultCols proto StatementHandle:DWORD, pNumCols:DWORD
  3.  
  • StatementHandle. Идентификатор инструкции.
  • pNumCols. Указатель на переменную типа dword которая возвращает число столбцов в наборе результатов.

  Если величина в переменной указанной pNumCols это 0, значит результат не устанавливался.

СВЯЗЫВАНИЕ СТОЛБЦОВ

  В некотором отношении, понятие - идентичное той же связи переменной с параметром инструкции SQL. Вы ассоциируете(связываете) переменную со специфическим столбцом в наборе результатов. В этом случае используется функция SQLBindCol, которая имеет следующий синтаксис:

Код (Text):
  1.  
  2. SQLBindCol proto StatementHandle:DWORD,
  3.                  ColumnNumber:DWORD,
  4.                  TargetValuePtr:DWORD,
  5.                  BufferLength:DWORD,
  6.                  pStrLenOrIndPtr:DWORD
  7.  
  • StatementHandle. Идентификатор инструкции
  • ColumnNumber. Номер столбца в наборе результатов, с которым будет произведено связывание. Номер столбца начинается с 1. Столбец 0 - столбец закладки.
  • TargetType. Константа, которая указывает тип переменной (буфера) указнного TargetValuePtr.
  • TargetValuePtr. Указатель на переменную или буфер, который будет связанн со столбцом. Когда вы вызываете SQLFetch, чтобы извлечь столбец из набора результатов, переменная или буфер будут заполняться величиной из связанного столбца.
  • BufferLength. Размер буфера указанного TargetValuePtr.
  • pStrLenOrIndPtr. Ищите подробное описание на консультации рассматривающей функцию SQLBindParameter

  Пример:

Код (Text):
  1.  
  2. .data?
  3. buffer db 21 dup(?)
  4. DataLength dd ?     ;will be filled with the length of the string
  5.                     ;in buffer after SQLFetch is called.
  6.  
  7. .code
  8.      .....
  9.      invoke SQLBindCol, hStmt, 1, SQL_C_CHAR,
  10.             addr buffer, 21, addr DataLength
  11.  

  ВЫБОРКА СТОЛБЦА

  Это - совсем просто. Функция SQLFetch извлекает столбец из набора результатов в связанные с ним переменные. После того, как функция SQLFetch вызвана, курсор обновляется. Вы можете понимать курсор как указатель записи. Он указывает на столбец который будет возвращаться когда ф-я SQLFetch вызвана. Например, если набор результатов имеет 4 столбца, курсор позиционируется на первом столбце когда создаётся набор результатов. Когда вызывается ф-я SQLFetch, курсор передвигается на 1 столбец. Таким образом, если вы вызываете ф-ю SQLFetch 4 раза, то получается, что столбцов которые можно выбрать больше нет. Тогда говорят, что курсор указывает на конец файла (EOF). SQLFetch имеет следующий синтаксис:

Код (Text):
  1.  
  2. SQLFetch proto StatementHandle:DWORD
  3.  

  Эта функция возвращает SQL_NO_DATA, если столбец больше недоступен.

  Пример:

Код (Text):
  1.  
  2. .data?
  3. buffer db 21 dup(?)
  4. DataLength dd ?
  5.  
  6. .code
  7.      .....
  8.      invoke SQLBindCol, hStmt, 1, SQL_C_CHAR, addr buffer, 21, addr DataLength
  9.      invoke SQLFetch, hStmt
  10.  
© Iczelion, пер. SheSan

0 922
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532