
- •Лабораторная работа n 1 Выборка данных из базы данных с использованием языка sql
- •Порядок выполнения работы
- •Содержание отчета
- •Основные сведения Язык sql
- •Оператор select
- •Предикаты условия поиска
- •Агрегатные функции
- •Операции реляционной алгебры
- •Работа с утилитой isql/w
- •Описание задания База данных книготорговой компании
- •Лабораторные задания типа а
- •Лабораторные задания типа b
- •Лабораторная работа n 2
- •Порядок выполнения работы Изучение языка баз данных
- •Типы данных Transact-sql
- •Создание таблицы
- •Определение столбца
- •Изменение таблиц
- •Создание представлений
- •Операторы, связанные с курсором
- •Одиночные операторы манипулирования данными
- •Создание индекса
- •Удаление объектов базы данных
- •Получение справочной информации об объектах базы данных
- •Варианты заданий
- •Лабораторная работа n 3 Соединение с базой данных в odbc
- •Лабораторная работа n 4
- •Лабораторная работа n 5
Лабораторная работа n 5
Выборка данных из результирующего множества в ODBC
Цель работы: изучить функции ODBC для выборки данных из результирующей таблицы, изучить скроллируемые курсоры в ODBC, приобрести навыки использования данных функций при разработке клиентских приложений баз данных.
Порядок выполнения работы и варианты заданий
1. Изучить программный интерфейс функций SQLFetch, SQLBindCol, SQLGetData, SQLExtendedFetch, SQLSetStmtOption.
2. Написать на языке программирования высокого уровня С/C++:
а) программу для создания курсора в ODBC. Определение курсора берется из вариантов заданий к лабораторной работе N 2. При нечетном номере варианта задания следует использовать статические курсоры, а при четном – динамические.
б) программу для просмотра результирующей таблицы с использованием функций SQLFetch и SQLBindCol (для нечетного номера варианта задания) и функции SQLGetData (для четного номера варианта задания);
в) программу для различных типов выборки строк из результирующей таблицы с использованием функции SQLExtendedFetch. Пользовательский интерфейс программы должен включать элементы управления (например, кнопки, диалоговые окна и т.д.) для показа первой, последней, следующей и предыдущей строк, а также строк с абсолютным и относительным номером N.
3. Запустить ODBC-администратор и с его помощью выбрать ODBC-драйвер для используемого в программе источника данных.
4. Выполнить программу, разработанную в п.2.
5. Оформить отчет о проделанной работе.
Основные сведения
Функция SQLBindCol
Данная функция назначает область хранения в памяти и тип данных для столбца результирующей таблицы. Функция SQLBindCol имеет следующий синтаксис:
RETCODE SQLBindCol(hstmt, icol, fcType, rgbValue, cbValueMax, pcbValue)
Описание параметров для данной функции приведено в следующей таблице.
Аргумент |
Тип |
Использование |
Описание |
hstmt |
HSTMT |
Вход |
Идентификатор оператора |
icol |
UWORD |
Вход |
Номер столбца |
fCType |
SWORD |
Вход |
С-тип данных столбца |
rgbValue |
PTR |
Вход |
Область хранения данных (адрес) |
cbValueMax |
SDWORD |
Вход |
Максимальная длина области хранения |
pcbValue |
SDWORD FAR* |
Вход |
Длина столбца выборки (адрес) |
Столбцы результирующей таблицы нумеруются слева направо, начиная с 1.
Функция SQLFetch
Данная функция извлекает очередную строку данных из результирующей таблицы, причем возвращаются данные для всех столбцов, которые были связаны с помощью функции SQLBindCol. Синтаксис функции SQLFetch:
RETCODE SQLFetch(hstmt),
где hstmt – идентификатор оператора (входной аргумент типа HSTMT).
Функция SQLGetData
Эта функция позволяет выполнить выборку данных из столбцов, которые не были связаны с помощью функции SQLBindCol. Функция SQLGetData имеет следующий синтаксис:
RETCODE SQLGetData(hstmt, icol, fCType, rgbValue, rgbValueMax, pcbValue)
Данная функция имеет те же параметры, что и функция SQLBiindCol. Функция SQLGetData полезна в тех случаях, когда нет нужды выполнять выборку одних и тех же столбцов для каждой строки результирующей таблицы при вызове SQLFetch.
Функция SQLExtendedFetch
Данная функция используется вместо функции SQLFetch для выборки строк результирующей таблицы. Функция SQLExtendedFetch расширяет функциональность функции SQLFetch, поскольку предусматривает блочные и скроллируемые (перемещаемые) курсоры. Функция . SQLExtendedFetch имеет следующий синтаксис:
RETCODE SQLExtendedFetch(hstmt,fFetchType, irow, pcrow, rgfRowStatus)
Описание параметров функции приведено в следующей таблице.
Аргумент |
Тип |
Использование |
Описание |
hstmt |
HSTMT |
Вход |
Идентификатор оператора |
fFetchType |
UWORD |
Вход |
Тип выборки |
Irow |
SDWORD |
Вход |
Число строк выборки |
pcrow |
UDWORD FAR * |
Выход |
Число реально извлеченных строк (адрес) |
rgfRowStatus |
UWORD FAR * |
Выход |
Массив значений состояния для извлеченного множества строк |
ODBC поддерживает статические и динамические курсоры. Статические курсоры нечувствительны к изменениям базовых таблиц, а динамические являются полностью чувствительными.
Движение курсора устанавливается с помощью параметров fFetchType и irow. В приведенной ниже таблице определены значения параметра fFetchType и соответствующие им результаты выборки функции SQLExtendedFetch.
FFetchType |
Действие SQLExtendedFetch |
SQL_FETCH_NEXT |
Следующее строковое множество |
SQL_FETCH_PRIOR |
Предыдущее строковое множество |
SQL_FETCH_RELATIVE |
Строковое множество, начиная с N-й строки по отношению к текущей позиции курсора |
SQL_FETCH_FIRST |
Первое строковое множество |
SQL_FETCH_LAST |
Последнее строковое множество |
SQL_FETCH_ABSOLUTE |
Строковое множество, начиная с N-й строки |
В приведенной таблице значение N определяется параметром irow. В данной лабораторной работе не используются блочные курсоры, по умолчанию считается, что строковое множество состоит из одной строки.
Методические указания
Создание курсора в ODBC не предполагает использование SQL-оператора объявления курсора. Курсор создается автоматически при выполнении оператора выборки SELECT. При этом идентификатор данного оператора SELECT должен использоваться для выборки данных из результирующей таблицы.
При выполнении данной лабораторной работы в полном объеме используется алгоритм использования ODBC, приведенный в описании лабораторной работы N 3.
Для выборки всех данных из заданных столбцов результирующей таблицы с помощью функций SQLBindCol и SQLFetch следует использовать следующий алгоритм:
1. Вызвать функцию SQLBindCol один раз для каждого столбца, который должен быть возвращен из результирующей таблицы.
2. Вызвать функцию SQLFetch для перемещения курсора на следующую строку и возврата данных из связанных столбцов.
3. Повторить шаг 2 до тех пор, пока функция SQLFetch не возвратит SQL_NO_DATA_FOUND.
Для выборки всех данных из заданных столбцов результирующей таблицы с помощью функций SQLGetData и SQLFetch следует использовать следующий алгоритм:
1. Вызывать функцию SQLFetch для перемещения курсора на следующую строку.
2. Вызвать функцию SQLGetData для каждого из заданных столбцов.
3. Повторить шаги 1 и 2 до тех пор, пока функция SQLFetch не возвратит SQL_NO_DATA_FOUND.
Прежде чем использовать перемещаемые курсоры, необходимо проверить, поддерживает ли драйвер функцию SQLExtendedFetch. Затем рекомендуется проверить, какие типы выборки допускает курсор (см. лабораторную работу N 3, варианты заданий типа B NN 4-9). После этого необходимо установить тип курсора (скроллируемый) с помощью функции SQLSetStmtOption. Пример вызова функции SQLSetStmtOption:
Rc=SQLSetStmtOption(hstmt, SQL_CURSOR_TYPE,
SQL_CURSOR_DYNAMIC);
В данном случае выбран динамический курсор. Для выбора статического курсора необходимо использовать опцию SQL_CURSOR_STATIC.
Библиографический список
1) Роберт Сигнор, Михаэль О. Стегман. Использование ODBC для доступа к базам данных. - М.: БИНОМ, 1995. - 384 с.
2) Кузнецов С.Д. Стандарты языка реляционных баз данных SQL: краткий обзор // СУБД. - N 2, 1996. - C.6-36
3) Венкатрао М., Пиццо М. SQL/CLI - новый стиль связывания для SQL // СУБД. - N 2, 1996. - C.37-44
4) Боуман Дж., Эмерсон С., Дарновски М. Практическое руководство по SQL. - М.: Диалектика, 1997. - 320 с.
5) Райан Стивенс, Рональд Р. Плю. SQL. - М.: БИНОМ, 1997. - 400 с.
6) Горев А., Ахаян Р., Макашарипов С. Эффективная работа с СУБД. - СПб.: Питер, 1997. - 704 с.
7) Соломон Девид и др. Microsoft SQL Server 6.5. Энциклопедия пользователя. - К.: ДиаСофт, 1998. - 784 с.
8) Джеймс Р.Грофф, Пол Н. Вайнберг. SQL: Полное руководство . - К.: BHV, 1998. - 608 c.
9) Ладани Ханс. SQL. Энциклопедия пользователя. - М.: ДиаСофт, 1998. - 624 с
10) Горелов А., Макашарипов С., Владимиров Ю. Microsoft SQL Server 6.5 для профессионалов. - СПб: Питер, 1998. - 464 с.
11) Роберт Д. Шнайдер. Microsoft SQL Server. Проектирование высокопроизводительных баз данных. - М.: ЛОРИ, 1998. - 361 с.
12) Рон Саукап. Основы Microsoft SQL Server 6.5. – М.: Издательский отдел “Русская редакция” ТОО "Channel Traiding Ltd". – 1999. – 704 c.
13) Уанкуп Д. MS SQL Server 6.5 в подлиннике. – М.: Издательский дом “Вильямс”, 1999. – 912 с.
14) Тихомиров Ю.В. Microsoft SQL Server 7.0: разработка приложений. - СПб.: BHV. - 1999. - 352 с.
15) Хансен Г., Хансен Дж. Базы данных: разработка и управление: Пер. с англ. - М.: БИНОМ, 1999. - 704 с.
16) Дунаев С. Доступ к базам данных и техника работы в сети. Практические приемы современного программирования. – М.: Диалог-МИФИ, 1999. – 416 с.
ПРИЛОЖЕНИЕ
База данных книготорговой компании
Таблица authors
au_id |
au_lname |
au_fname |
phone |
address |
city |
state |
contract |
172-32-1176 |
White |
Johnson |
408 496-7223 |
10932 Bigge Rd. |
Menlo Park |
CA |
1 |
213-46-8915 |
Green |
Marjorie |
415 986-7020 |
309 63rd St. #411 |
Oakland |
CA |
1 |
238-95-7766 |
Carson |
Cheryl |
415 548-7723 |
589 Darwin Ln. |
Berkeley |
CA |
1 |
267-41-2394 |
O'Leary |
Michael |
408 286-2428 |
22 Cleveland Av. #14 |
San Jose |
CA |
1 |
274-80-9391 |
Straight |
Dean |
415 834-2919 |
5420 College Av. |
Oakland |
CA |
1 |
341-22-1782 |
Smith |
Meander |
913 843-0462 |
10 Mississippi Dr. |
Lawrence |
KS |
0 |
409-56-7008 |
Bennet |
Abraham |
415 658-9932 |
6223 Bateman St. |
Berkeley |
CA |
1 |
427-17-2319 |
Dull |
Ann |
415 836-7128 |
3410 Blonde St. |
Palo Alto |
CA |
1 |
472-27-2349 |
Gringlesby |
Burt |
707 938-6445 |
PO Box 792 |
Covelo |
CA |
1 |
486-29-1786 |
Locksley |
Charlene |
415 585-4620 |
18 Broadway Av. |
San Francisco |
CA |
1 |
527-72-3246 |
Greene |
Morningstar |
615 297-2723 |
22 Graybar House Rd. |
Nashville |
TN |
0 |
648-92-1872 |
Blotchet-Halls |
Reginald |
503 745-6402 |
55 Hillsdale Bl. |
Corvallis |
OR |
1 |
672-71-3249 |
Yokomoto |
Akiko |
415 935-4228 |
3 Silver Ct. |
Walnut Creek |
CA |
1 |
712-45-1867 |
del Castillo |
Innes |
615 996-8275 |
2286 Cram Pl. #86 |
Ann Arbor |
MI |
1 |
722-51-5454 |
DeFrance |
Michel |
219 547-9982 |
3 Balding Pl. |
Gary |
IN |
1 |
724-08-9931 |
Stringer |
Dirk |
415 843-2991 |
5420 Telegraph Av. |
Oakland |
CA |
0 |
724-80-9391 |
MacFeather |
Stearns |
415 354-7128 |
44 Upland Hts. |
Oakland |
CA |
1 |
756-30-7391 |
Karsen |
Livia |
415 534-9219 |
5720 McAuley St. |
Oakland |
CA |
1 |
807-91-6654 |
Panteley |
Sylvia |
301 946-8853 |
1956 Arlington Pl. |
Rockville |
MD |
1 |
846-92-7186 |
Hunter |
Sheryl |
415 836-7128 |
3410 Blonde St. |
Palo Alto |
CA |
1 |
893-72-1158 |
McBadden |
Heather |
707 448-4982 |
301 Putnam |
Vacaville |
CA |
0 |
899-46-2035 |
Ringer |
Anne |
801 826-0752 |
67 Seventh Av. |
Salt Lake City |
UT |
1 |
998-72-3567 |
Ringer |
Albert |
801 826-0752 |
67 Seventh Av. |
Salt Lake City |
UT |
1 |
Таблица publishers
pub_id |
pub_name |
city |
state |
country |
0736 |
New Moon Books |
Boston |
MA |
USA |
0877 |
Binnet & Hardley |
Washington |
DC |
USA |
1389 |
Algodata Infosystems |
Berkeley |
CA |
USA |
1622 |
Five Lakes Publishing |
Chicago |
IL |
USA |
1756 |
Ramona Publishers |
Dallas |
TX |
USA |
9901 |
GGG&G |
Mмnchen |
(null) |
Germany |
9952 |
Scootney Books |
New York |
NY |
USA |
9999 |
Lucerne Publishing |
Paris |
(null) |
France |
Таблица titles
title_id |
title |
type |
pub_id |
price |
advance |
ytd_sales |
pubdate |
BU1032 |
The Busy Executive's Database Guide |
business |
1389 |
19.99 |
5,000.00 |
4095 |
Jun 12 1991 12:00AM |
BU1111 |
Cooking with Computers: Surreptitious Balance Sheets |
business |
1389 |
11.95 |
5,000.00 |
3876 |
Jun 9 1991 12:00AM |
BU2075 |
You Can Combat Computer Stress! |
business |
0736 |
2.99 |
10,125.00 |
18722 |
Jun 30 1991 12:00AM |
BU7832 |
Straight Talk About Computers |
business |
1389 |
19.99 |
5,000.00 |
4095 |
Jun 22 1991 12:00AM |
MC2222 |
Silicon Valley Gastronomic Treats |
mod_cook |
0877 |
19.99 |
0.00 |
2032 |
Jun 9 1991 12:00AM |
MC3021 |
The Gourmet Microwave |
mod_cook |
0877 |
2.99 |
15,000.00 |
22246 |
Jun 18 1991 12:00AM |
MC3026 |
The Psychology of Computer Cooking |
UNDECIDED |
0877 |
(null) |
(null) |
(null) |
Apr 3 1996 3:45AM |
PC1035 |
But Is It User Friendly? |
popular_comp |
1389 |
22.95 |
7,000.00 |
8780 |
Jun 30 1991 12:00AM |
PC8888 |
Secrets of Silicon Valley |
popular_comp |
1389 |
20.00 |
8,000.00 |
4095 |
Jun 12 1994 12:00AM |
PC9999 |
Net Etiquette |
popular_comp |
1389 |
(null) |
(null) |
(null) |
Apr 3 1996 3:45AM |
PS1372 |
Computer Phobic AND Non-Phobic Individuals: Behavior Variations psychology |
0877 |
21.59 |
7,000.00 |
375 |
Oct 21 1991 12:00AM |
|
PS2091 |
Is Anger the Enemy? |
psychology |
0736 |
10.95 |
2,275.00 |
2045 |
Jun 15 1991 12:00AM |
PS2106 |
Life Without Fear |
psychology |
0736 |
7.00 |
6,000.00 |
111 |
Oct 5 1991 12:00AM |
PS3333 |
Prolonged Data Deprivation: Four Case Studies |
psychology |
0736 |
19.99 |
2,000.00 |
4072 |
Jun 12 1991 12:00AM |
PS7777 |
Emotional Security: A New Algorithm |
psychology |
0736 |
7.99 |
4,000.00 |
3336 |
Jun 12 1991 12:00AM |
TC3218 |
Onions, Leeks, and Garlic: Cooking Secrets of the Mediterranean |
trad_cook |
0877 |
20.95 |
7,000.00 |
375 |
Oct 21 1991 12:00AM |
TC4203 |
Fifty Years in Buckingham Palace Kitchens |
trad_cook |
0877 |
11.95 |
4,000.00 |
15096 |
Jun 12 1991 12:00AM |
TC7777 |
Sushi, Anyone? |
trad_cook |
0877 |
14.99 |
8,000.00 |
4095 |
Jun 12 1991 12:00AM |
Таблица titleauthor
au_id |
title_id |
172-32-1176 |
PS3333 |
213-46-8915 |
BU1032 |
213-46-8915 |
BU2075 |
238-95-7766 |
PC1035 |
267-41-2394 |
BU1111 |
267-41-2394 |
TC7777 |
274-80-9391 |
BU7832 |
409-56-7008 |
BU1032 |
427-17-2319 |
PC8888 |
472-27-2349 |
TC7777 |
486-29-1786 |
PC9999 |
486-29-1786 |
PS7777 |
648-92-1872 |
TC4203 |
672-71-3249 |
TC7777 |
712-45-1867 |
MC2222 |
722-51-5454 |
MC3021 |
724-80-9391 |
BU1111 |
724-80-9391 |
PS1372 |
756-30-7391 |
PS1372 |
807-91-6654 |
TC3218 |
846-92-7186 |
PC8888 |
899-46-2035 |
MC3021 |
899-46-2035 |
PS2091 |
998-72-3567 |
PS2091 |
998-72-3567 |
PS2106 |