Работа с базами данных

ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ 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 для продвижения курсора в обратном направлении?



  • Содержание раздела