русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

БАЗОВЫЕ ФУНКЦИИ ВЫБОРКИ ДАННЫХ


Дата добавления: 2013-12-24; просмотров: 1464; Нарушение авторских прав


Как только закончена выборка информации о результирующем множестве, можно приступать к выборке собственно результирующего множества. В 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() назначает область хранения в памяти и тип данных для столбца результирующего множества. Она определяет:

• Буфер хранения для получения содержимого столбца данных в результирующем множестве,



• Длину указанного буфера хранения,

• Область памяти для хранения длины столбца выборки

• Преобразование типа данных.

Синтаксис данной функции имеет следующий вид:

 

RETCODE SQLBindCol (hstmt, icol, fcType, rgbValue, cbValueMax,

pcbValue)

 

Таблица 34 Параметры функции SQLBindCol()

Тип Аргумент Использование Описание
HSTMT hstmt Вход Идентификатор оператора
UWORD icol Вход Номер столбца результирующего множества, упорядоченный слева направо, начиная с 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:

 

#include <sql.h>

#include <stdio.h>

#include <stdlib.h>

#define MAX_STMT_LEN 100

main()

{

HENV henv; /*идентификатор среды*/

HDBC hdbc; /*идентификатор соединения*/

HSTMT hstmt; /*идентификатор оператора*/

RETCODE rc; /*код возврата*/

UCHAR selstmt [MAX_STMT_LEN] /*строка оператора*/

UCHAR address [30];

UCHAR tel_no [15];

UCHAR pos [25];

SDWORD address_len, tel_no_len, pos_len;

SQLAllocEnv (&henv);

SQLAllocConnect (henv, &hdbc);

 

rc=SQLConnect (hdbc, “drhome”, SQL_NTS, “student”, SQL_NTS, “student”,

SQL_NTS);

if (rc = = SQL_SUCCESS || rc = = SQL_SUCCESS_WITH_INFO)

{

SQLAllocStmt (hdbc,&hstmt);

lstrcpy (selstmt, “select address, tel_no, position from staff

where lname = ‘Иванов’ and fname = ‘Иван’ ”);

if (SQLExecDirect (hstmt, selstmt, SQL_NTS) != SQL_SUCCESS)

exit (-1);

SQLBindCol (hstmt, 1, SQL_C_CHAR, address,

(SDWORD)sizeof(address), address_len);

SQLBindCol (hstmt, 2, SQL_C_CHAR, tel_no,

(SDWORD)sizeof(tel_no), tel_no_len);

SQLBindCol (hstmt, 3, SQL_C_CHAR, pos,

(SDWORD)sizeof(pos), pos_len);

 

while(RETCODE_IS_SUCCESSFULL(rc))

{

rc=SQLFetch (hstmt);

if (RETCODE_IS_SUCCESSFULL(rc))

{

/*…вывод возвращенных строк…*/

}

}

SQLFreeStmt (hstmt, SQL_DROP);

SQLDisconnect (hdbc);

}

SQLFreeConnect (hdbc);

SQLFreeEnv(henv);

}

 



<== предыдущая лекция | следующая лекция ==>
ВЫБОРКА ИНФОРМАЦИИ О РЕЗУЛЬТИРУЮЩЕМ МНОЖЕСТВЕ | Методы представления документа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.434 сек.