Как только закончена выборка информации о результирующем множестве, можно приступать к выборке собственно результирующего множества. В ODBC существует две функции базового уровня для выборки результатов: SQLBindCol() и SQLFetch(). Функция SQLBindCol() определяет область хранения данных результирующего множества, а SQLFetch() осуществляет выборку данных в области хранения. Алгоритм программы, использующей эти функции для возвращения данных из всех строк результирующего множества, предполагает выполнение следующих шагов:
1. Вызов SQLBindCol() один раз для каждого столбца, который должен быть возвращен из результирующего множества,
2. Вызов SQLFetch() для перемещения курсора на следующую строку и возврата данных из связанных столбцов,
3. Повторение шага 2 до тех пор пока SQLFetch() не возвратит SQL_NO_DATA_FOUND. Это указывает на то, что был достигнут конец результирующего множества. Если результирующее множество является пустым, то SQL_NO_DATA_FOUND будет возвращен сразу же при первом вызове SQLFetch().
Функция SQLFetch() извлекает строку данных из результирующего множества для выполненного SQL – оператора. Драйвер возвращает данные для всех столбцов, которые были связаны для предварительного хранения данных с помощью функции SQLBindCol(). Синтаксис функции SQLFetch():
RETCODE SQLFetch (hstmt)
Здесь HSTMT – идентификатор выполненного оператора.
Если необходимо определить область хранения данных результирующего множества, которые должны быть извлечены, то вызывается функция SQLBindCol(). Каждый столбец, который требуется выбрать, связывается с помощью отдельного вызова функции.
Функция SQLBindCol() назначает область хранения в памяти и тип данных для столбца результирующего множества. Она определяет:
• Буфер хранения для получения содержимого столбца данных в результирующем множестве,
• Длину указанного буфера хранения,
• Область памяти для хранения длины столбца выборки
Номер столбца
результирующего множества, упорядоченный слева направо, начиная с 1
SWORD
fcType
Вход
С – тип данных столбца результирующего множества. Некоторые из возможных значений:
SQL_C_BINARY,
SQL_C_BIT,
SQL_C_CHAR,
SQL_C_DEFAULT,
SQL_C_FLOAT,
SQL_C_SLONG,
SQL_C_SSHORT,
SQL_C_ULONG,
SQL_C_USHORT.
SQL_C_DEFAULT определяет, что данные должны быть переданы в С – тип по умолчанию.
PTR
rgbValue
Вход
Указатель области хранения данных. Если является нулевым указателем, то драйвер “отвязывает” столбец. Для “отвязывания” всех столбцов программа вызывает SQLFreeStmt() с опцией SQL_UNBIND.
SDWORD
cbValueMax
Вход
Максимальная длина буфера rgbValue. Для символьных данных буфер должен предусматривать место для нуль – окончания строки.
Продолжение таблицы 34
SDWORD*
pcbValue
Вход
SQL_NULL_DATA или размер возвращаемой в rgbValue строки. Если размер строки не может быть определен, то по адресу pcbValue размещается SQL_NO_TOTAL.
SDWORD*
pcbValue
Вход
Если размер строки не может быть определен, или больше cbValueMax, то данные в rgbValue усекаются до размера, определенного в cbValueMax и имеют нулевое окончание, благодаря драйверу.
Для двоичных данных выполняется то же самое с поправкой на нуль – окончание. Для всех других типов данных значение cbValueMax игнорируется и драйвер считает, что размер rgbValue равен размеру С – типа данных, определенного в fcType.
Приведем пример программы, использующей средства ODBC: