Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_РУС_БД.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
131.94 Кб
Скачать

Лабораторная работа 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]