ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC
Лабораторная работа 8
ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC
Цель работы
Ознакомиться с базовыми функциями выборки данных в ODBC и разработать с их использованием программу получения данных из результирующего множества.
Содержание работы и методические указания к ее выполнению
Для выполнения работы необходимо
изучить базовые функции выборки данных SQLBindCol, SQLFetch(), SQLGetData();
ознакомиться с алгоритмами извлечения данных из результирующего множества с использованием средств ODBC;
настроить среду выполнения, разработать и отладить ODBC-программу выборки данных.
В ODBC существует две функции базового уровня для выборки результатов - SQLBindCol() и SQLFetch(). Функция SQLBindCol() определяет область хранения данных результирующего множества, функция SQLFetch() осуществляет выборку данных в области хранения.
Каждый столбец, который требуется выбрать, связывается с помощью отдельного вызова функции SQLBindCol(). Функция SQLBindCol() назначает область хранения в памяти и тип данных для столбца результирующего множества. Она определяет:
буфер хранения для получения содержимого столбца данных в результирующем множестве.
длину указанного буфера хранения.
область памяти для хранения длины столбца выборки.
преобразование типа данных.
Алгоритм программы, использующей SQLFetch() и SQLBindCol() для возвращения данных из результирующего множества предполагает выполнения следующих шагов:
Вызывается функция SQLBindCol() один раз для каждого столбца, который должен быть возвращен из результирующего множества.
Вызывается функция SQLFetch() для перемещения курсора на следующую строку и возврата данных из связанных столбцов.
Повторяется шаг 2 до тех пор, пока функция SQLFetch()не возвратит SQL_NO_DATA_FOUND. Это указывает на то, что был достигнут конец результирующего множества. Если результирующее множество является пустым, то SQL_NO_DATA_FOUND будет возвращен при первом вызове SQLFetch().
RETCODE SQLBindCol (hstmt, icol, fcType, rgbValue, cbValueMax, pcbValue)
Если rgbValue является нулевым указателем, то драйвер "отвязывает" столбец. Для отвязывания всех столбцов прикладная программа вызывает функцию
SQLFreeStmt() с опцией SQL_UNBIND.
SDWORD cbValueMax; - максимальная длина буфера rgbValue; для символьных данных, rgbValue должен также включать в себя место для байта нулевого окончания.
SDWORD FAR* pcbValue; - число байт, которое может возвращаться в rgbValue при вызове
SQLGetData().
Замечание. Прикладная программа может использовать
SQLBindCol() для некоторых столбцов, а
SQLGetData() - для других столбцов в пределах той же самой строки.
Последовательность выполнения лабораторной работы
Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.
Разработать ODBC-программу для решения задачи из соответствующего варианта с помощью функций SQLBindCol(), SQLFetch().
Разработать ODBC-программу для решения задачи из соответствующего варианта с помощью функций SQLFetch(), SQLGetData().
После выполнения лабораторной работы привести базу данных в исходное состояние.
Требования к разрабатываемой программе
Разрабатываемая программа должна удовлетворять следующим требованиям:
все используемые функции ODBC должны анализироваться на корректность кода возврата;
в программе должен быть предусмотрен вывод сообщений обо всех шагах ее выполнения, в том числе и о возможных ошибках;
при выполнении запросов должно быть предусмотрено использование параметров; параметры варианта задания должны быть введены в ходе выполнения программы и переданы в SQL-запрос;
при выполнении программы должна контролироваться целостность базы данных;
программа должна быть достаточно документирована.
Варианты заданий
Вывести информацию о поставщиках, поставивших детали для изделий из указанного города.
Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия.
Вывести информацию о поставщиках, которые осуществляли поставки деталей из заданного города в указанный период.
Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.
Вывести информацию обо всех деталях, поставляемых для указанного изделия более чем одним поставщиком.
Вывести информацию о деталях, поставки которых были осуществлены для указанного изделия всеми поставщиками.
Вывести информацию об изделиях, для которых была поставлена указанная деталь.
Вывести информацию о поставщиках, которые осуществляли поставки деталей для указанного изделия.
Контрольные вопросы
Какие существуют базовые функции выборки данных? Охарактеризуйте каждую из них.
Как "отвязать" отдельный столбец результирующего множества?
Каким образом можно "отвязать" все столбцы результирующего множества?
Что возвращает функция SQLFetch, если в результирующем множестве больше не осталось данных?
Как определить область хранения данных?
Каков алгоритм выборки данных с помощью курсора?
Как работает функция SQLFetch?
Можно ли использовать SQLFetch для продвижения курсора в обратном направлении?
Содержание раздела