Practicum_Database

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Нижегородский государственный университет имени Н.И. Лобачевского
И.В. Рахмелевич
БАЗЫ ДАННЫХ
Практикум
Рекомендовано методической комиссией
факультета управления и предпринимательства
для студентов заочной формы обучения,
обучающихся по направлению подготовки
230700 − «Прикладная информатика»,
специализация «Прикладная информатика в экономике»
Нижний Новгород
2013
1
УДК 681.3
ББК 32.973
И.В. Рахмелевич. БАЗЫ ДАННЫХ: Практикум. Нижний Новгород: Нижегородский государственный университет им. Н.И. Лобачевского, 2013. −
40 с.
Рецензент: д. э. н., профессор Салмин С. П.
Настоящий практикум содержит практические задания по дисциплине «Базы данных» - одной из важнейших дисциплин в области информационных технологий. В процессе их выполнения студенты на практике
изучают создание структуры базы данных, а также технологии управления
данными, хранящимися в базе. В сборнике приводятся задания по составлению запросов всех видов на языке SQL, который является наиболее популярным языком для работы с базами данных. Кроме того, даются практические навыки по разработке простейших приложений для баз данных в
среде Delphi 7.
Ответственный за выпуск:
председатель методической комиссии
факультета управления и предпринимательства ННГУ
к.э.н., доцент С.Д. Макарова
УДК 681.3
ББК 32.973
© Нижегородский государственный
университет им. Н.И. Лобачевского, 2013
© И.В.Рахмелевич, 2013
2
Введение
В процессе изучения современных информационных технологий ведущую роль играет освоение эффективных технологий хранения, обработки и анализа больших объемов информации. Этому посвящен курс «Базы данных», являющийся одной из важнейших дисциплин для студентов,
обучающихся по направлению подготовки «Прикладная информатика».
Задания, включенные в настоящий практикум, ориентированы на то, чтобы
помочь студентам приобрести необходимые практические навыки по работе с базами данных (БД), в том числе создание структуры БД, анализ и модификация данных, хранящихся в БД. Практикум включает задания, посвященные освоению языка SQL, который является наиболее известным и
популярным языком для работы с БД. Определенное внимание уделено
разработке приложений для баз данных в среде Delphi 7, что необходимо
для разработки интерфейса пользователей, обеспечивающего их работу с
БД. В процессе выполнения заданий используется СУБД Paradox, доступная в компьютерных классах.
3
Задание 1. База данных «Личная библиотечка»
Цель задания − создать базу данных и спроектировать приложение, предназначенное для работы с картотекой книг личной библиотечки, предполагая для простоты, что база данных состоит из одной таблицы со структурой, определяемой сведениями, которые отражаются в карточке.
В карточке на книгу должны быть отражены следующие сведения:






Автор(ы).
Название.
Год издания.
Объем в страницах.
Дата поступления.
Комментарий.
Методические указания
I. Создание рабочих папок (каталогов)
Создать в вашей личной папке две папки с именами Books, BooksAppl.
Первая из этих папок будет использоваться для временного хранения файлов базы данных, а вторая - для хранения приложения.
II. Создание таблицы для хранения данных
Для создания таблицы БД используйте утилиту Database Desktop (поставляемую вместе с Delphi). Эта программа предназначена для разработчика и
позволяет создавать и модифицировать структуры таблиц, а также вставлять, изменять и удалять записи.
Установить рабочий каталог I:\...\ Books, с которым DBD работает по
умолчанию, используя команду меню File / Working Directory в окне DBD.
Создать таблицу c помощью команды меню File / New / Table. В окне
определения структуры каждая строка соответствует атрибуту (полю).
Примечания:
• Fields Name – имя поля;
• Type – тип поля;
4
• Size – размер поля для строковых полей (поскольку размер иных полей
определяется типом);
• Key – содержит *, если поле входит в состав первичного ключа. Если
первичный ключ составной, имеет значение порядок следования полей.
Кроме того, первыми в списке полей должны быть все поля, входящие в
состав первичного ключа.
Определите все поля отношения в соответствии со следующей таблицей:
Назначение
поля
Имя поля
Тип данных
BookNumb
Short
Автор(ы)
Authors
Аlpha
50
Название
BookName
Аlpha
50
Год издания
YearPub
Short
Объем в страницах
VolPages
Short
Дата поступления
DatePost
Date
Комментарий
Comment
Аlpha
Номер книги
Размер
Ключ
*
240
Замечание:
• для всех полей назначить свойство Required – требование обязательного
существования непустого значения на момент сохранения записи в БД –
кроме поля «Комментарий» (книга может не иметь комментария).
Сохранить описание структуры таблицы с помощью команды File / Save
As, дав ей имя CatalogBooks.
IV. Заполнение таблицы базы данных
Как правило, DBD используется для заполнения только таких таблиц БД,
которые используются для хранения служебной информации и для редактирования данных в которых не предполагается разрабатывать соответствующий пользовательский интерфейс. Но мы воспользуемся этой возможностью для ввода записей в качестве упражнения:
1. В окне вызвать команду меню Table / Edit Data.
5
2. Ввести одну запись в таблицу.
V. Создание приложения для работы с базой данных "Библиотечка"
1. Создать в Delphi новый проект.
2. Сделать заголовок формы (свойство Caption) «Просмотр и редактирование данных».
3. Добавить на форму 3 кнопки, ввести для них надписи (свойство
Caption) OpenTable, CloseTable, Exit. Нажатие кнопки Exit
должно завершать работу приложения – для этого создайте соответствующий обработчик события OnClick.
4. Сохранить проект в папке I:\...\ BooksAppl.
5. Разместить на форме компонент Table из страницы Data Access.
Компонент Table является невизуальным. Он применяется для хранения и доступа к данным.
6. Расположить на форме компонент DataSource (источник данных).
Установить значение Table1 для свойства DataSet (имя набора
данных) этого компонента.
7. Расположить на форме компонент DBGrid из страницы Data
Controls (служит для отображения записей в табличной форме).
Установить значение DataSource1 для свойства DataSource
этого компонента.
8. Для того чтобы указать базу данных и конкретную таблицу, с которой должен быть связан компонент Table1, необходимо создать
обработчик события FormActivate для главной формы проекта и
ввести в него следующие операторы:
Table1.DatabaseName:='I:\...\Books\';
Table1.TableName:='CatalogBooks.db';
Первый из этих операторов определяет базу данных, а второй конкретную таблицу, с которой должен быть связан компонент Table1.
9. Кнопки OpenTable, CloseTable должны «открывать» и «закрывать» таблицу, т. е. при нажатии первой из них должна быть установлена связь между компонентом Table1 и реально существующей таблицей, в результате чего данные из таблицы должны быть
6
отображены на форме с помощью компонента DBGrid1. При нажатии второй кнопки связь разрывается, и отображение данных отменяется. Поэтому введите в обработчики событий OnClick для этих
кнопок следующие операторы:
Table1.Active:=True;
- для кнопки OpenTable
Table1.Active:=False;
- для кнопки CloseTable.
10. Сохранить проект. Скомпилировать и выполнить приложение. Открыть таблицу, щелкнув по кнопке OpenTable. Исследовать поведение компонента DBGrid, добавляя записи (кортежи), изменяя атрибуты, удаляя записи (Ctrl+Del).
11. Ввести данные в таблицу:
Book
Authors
Num
b
1
Пушкин А.С.
2
Лермонтов
М.Ю.
3
Толстой Л.Н.
4
Драйзер Т.
5
Толстой А.Н.
6
Чейз Д.Х.
BookName
YearPu
b
VolPages
DatePost
Дубровский
Мцыри
1969
1977
120
80
30.06.1970
01.02.1978
Воскресение
Финансист
Петр Первый
Казино
1970
1987
1975
2000
450
570
690
170
20.01.1971
15.07.1989
01.11.1977
10.06.2001
7
Драйзер Т.
Титан
1981
420
12.08.1987
8
9
Драйзер Т.
Чейз Д.Х.
Стоик
Двойная сдача
1991
2001
510
190
20.07.1992
15.07.2001
10
Чейз Д.Х.
Снайпер
2001
165
15.07.2001
11
12
Воронин А.
Хейли А.
Олигарх
Перегрузка
2003
2002
351
625
03.05.2003
15.04.2003
7
Comment
Серия
PocketBook
Букинистическое
издание
Серия
PocketBook
Серия
PocketBook
Просмотреть введенные данные.
12. Добавить на форму компонент DBNavigator из страницы Data
Control. Для свойства DataSource установить значение
DataSource1.
13. Исследовать возможности использования этого компонента для работы с таблицей. Сохранить проект.
14. Предъявить результаты работы преподавателю.
8
Задание 2. Составление простейших однотабличных
запросов на выборку данных
В ходе выполнения настоящего задания требуется создать запросы на выборку из базы данных «Библиотечка» (задание 21), с помощью которых
получить следующую информацию:
1. Вывести список книг одного автора (Драйзер Т.) и отсортировать результаты по году издания в порядке убывания.
2. Вывести список книг, включающий книги А.С.Пушкина объемом не
более 200 страниц и книги Л.Н.Толстого объемом не менее 400 страниц.
3. Вывести список книг авторов с фамилией «Толстой», отсортированный
по дате поступления, используя проверку на соответствие шаблону.
4. Вывести список книг изданных с 1975 по 2000 год включительно, с сортировкой по автору и дате поступления.
5. Вывести список книг изданных в 1975 - 1985 гг.,1987 г.,1991-2000 гг., с
сортировкой по автору и дате поступления.
6. Вывести список, включающий авторов и названия книг, авторы которых входят в заданный список (Драйзер Т., Хейли А., Чейз Д.Х.), с сортировкой результатов по автору, используя оператор IN (проверка на
принадлежность к множеству).
7. Сформулировать эквивалентный запрос, используя логическую операцию OR.
8. Вывести список, включающий авторов, названия и год издания книг,
изданных не раньше 1975 года за исключением книг М.Ю.Лермонтова,
А.Н.Толстого, Т. Драйзера.
9. Показать авторов и названия книг, к которым в базе данных имеется
комментарий, используя проверку на значение NULL.
10.Вывести список, включающий авторов и названия книг, которые относятся к серии PocketBook, а также книг без комментария объемом более
500 страниц.
11.Показать количество книг каждого автора, которое имеется в библиотеке, используя группировку и статистическую функцию COUNT.
12.Выполнить тот же запрос, что и в п.11, при дополнительном условии,
что для каждого из выбранных авторов имеется не менее 2 книг. При
этом использовать условие отбора для групп (предложение HAVING).
9
13.Выполнить тот же запрос, что и в п.11, при дополнительном условии,
что или для каждого из выбранных авторов имеется не менее 3 книг,
или средний объем его книг составляет не менее 300 страниц.
14.Вывести данные о количестве книг, относящихся к сериям «Серия
PocketBook» и «Букинистическое издание». В результаты запроса
включить название серии и количество книг.
15.Отобразить данные о книгах (автор, название, год издания, количество
страниц), поступивших в библиотеку в 2001 году, используя функцию
EXTRACT.
16.Вывести данные о том, книги каких годов издания имеются в библиотеке в количестве не менее 2 книг. В результаты запроса включить год
издания и количество книг.
17.Показать данные о книгах библиотеки (автор, название, год издания,
количество страниц) и сколько прошло лет между изданием книги и ее
поступлением в библиотеку. Для этого включить в запрос вычисляемое
поле DELAY (задержка). Отсортировать результаты по этому полю.
18.Вывести данные о книгах (те же, что и в предыдущей задаче), для которых между изданием книги и ее поступлением в библиотеку прошло не
менее 2 лет.
19.Вывести данные о книге с наиболее поздним годом издания.
20.Вывести список авторов, у которых в библиотеке нет книг 2001-2003
годов издания.
21.Вывести список авторов, у которых в библиотеке есть книги разных лет
издания. Решить задачу двумя способами:
а) с использованием секции HAVING;
б) с использованием рекурсивной связи между таблицами.
22.Вывести список авторов, имеющих книги, у которых интервал между
годами издания составляет не менее 10 лет.
23.Вывести список книг, написанных одним и тем же автором и поступивших в библиотеку в разные годы.
24.Вывести список книг, написанных одним и тем же автором и поступивших в библиотеку в одном и том же году.
25.Вывести список книг, написанных одним и тем же автором и отличающихся по объему более чем в 2 раза.
С целью управления выполнением запросов и обеспечения интерфейса для
пользователя разработать приложение в среде Delphi, на основе приложения TaskBooks, созданного в задании 1. К этому приложению добавить но10
вую форму для работы с запросами и соответствующий программный модуль. Эта форма должна содержать список имен запросов (имена должны
отражать содержание запроса и быть по возможности понятными для
пользователя. Они, вообще говоря, могут не совпадать с именами файлов,
в которых сохранены запросы в каталоге БД). Кроме того, на форме должны быть компоненты, отображающие текст запроса и результаты его выполнения, и кнопки для запуска и закрытия запроса.
Методические указания:
I. Создание и тестирование запросов.
1. Запустите Database Desktop.
2. Установите рабочий каталог Books, с которым DBD работает по
умолчанию, используя команду меню File / Working Directory в окне
DBD. Для создания нового запроса вызовите команду меню File /
New / SQL File.
3. Составьте на языке SQL текст запроса, соответствующего п. 1 задания (см. выше) и введите его в окне для ввода запроса. Запустите запрос на выполнение, используя кнопку «Run SQL» на панели инструментов в окне DBD. Если DBD выдает сообщения о синтаксических ошибках (т.е. о нарушениях правил языка SQL в тексте запроса), то проанализируйте текст запроса и исправьте ошибки. Если запрос успешно выполнен, то закройте результаты и сохраните текст
запроса как файл с расширением .sql (например BksDr.sql) в рабочем каталоге.
4. Повторите указанные действия (начиная с вызова команды меню
File / New / SQL File) для каждого из пп. 2-25 задания.
II. Создание формы для работы с запросами.
Запустите Delphi и откройте приложение TaskBooks. Создайте новую форму с помощью команды File/New Form. Сделайте заголовок формы «Запросы» (свойство Caption) и разместите на ней следующие компоненты:
1) 3 стандартных кнопки (Button1, Button2, Button3). Сделайте надписи
этих кнопок (свойство Caption) OpenQuery, CloseQuery, Exit.
2) В верхней части окна формы добавить метку (Label1) и непосредственно под ней комбинированный список (ComboBox1). Сделайте
надпись (свойство Caption) на этой метке «Список запросов»
3) Ниже добавить метку (Label2) и непосредственно под ней многострочный редактор (Memo1). Задайте отображение полос прокрутки
11
у компонента Memo1, установив свойство ScrollBars – ssBoth. Сделайте надпись (свойство Caption) на этой метке «Текст запроса».
4) Ниже добавить метку (Label3) и непосредственно под ней компонент DBGrid1. Сделайте надпись (свойство Caption) на этой метке
«Результаты запроса».
5) Добавить на форму невизуальные компоненты Query1, DataSource1.
Установите свойство компонента DataSource:
DataSet (имя набора данных) – Query1.
Установите свойство компонента DBGrid:
DataSource – DataSource1.
Сохраните проект и назовите новый модуль Queries
6) Перейдите на форму Form1 и добавьте кнопку, установите для нее
свойство Caption - Queries
7) Используя команду File/Use Unit введите в модуль Queries оператор
uses ViewTab;
а в модуль ViewTab оператор
uses Queries;
8) Кнопка Queries на главной форме (Form1) должна обеспечивать переход на форму «Запросы» (Form2). Поэтому для этой кнопки создайте обработчик события OnClick и включите в него оператор
Form2.ShowModal;
9) Кнопка Exit, созданная в п.1), должна обеспечивать закрытие формы
«Запросы» и переход на главную форму. Поэтому создайте для этой
кнопки обработчик события OnClick и включите в него оператор
Close;
10) Проверьте переходы между формами. Сохраните проект.
III. Разработка программного кода и организация интерфейса для работы с запросами.
1) Создайте в модуле ViewTab две глобальные переменные dbn, tn
типа string, определяющие путь к каталогу БД и имя файла таблицы; описание этих переменных поместите в разделе interface после оператора
var
Form1: TForm1;
Для присвоения начальных значений этим переменным создайте обработчик события FormCreate для главной формы и включите в него
12
операторы
dbn:='I:\...\Books\';
tn:='CatalogBooks.db';
Внесите изменения в обработчик события FormActivate, заменив
строковые значения в правых частях на имена соответствующих переменных.
2) Для заполнения списка запросов при создании соответствующей
формы (Form2), создайте обработчик события FormCreate для этой
формы и включите в него операторы вида
ComboBox1.Items.Add(‘Книги Драйзера’);
Количество этих операторов и значения строковых констант в скобках (названия запросов) определяются количеством и содержанием
создаваемых запросов (см. пп.1-25 текста задания).
Для того, чтобы указать, к какой БД будет обращаться запрос
Query1, включите в обработчик события FormCreate оператор
Query1.DatabaseName:=dbn;
3) Создайте обработчик события OnClick для компонента ComboBox1.
При выполнении этой процедуры пользователь выбирает из списка
имя одного из запросов, в результате чего текст этого запроса должен загрузиться в редактор Memo1.
Опишите в этой процедуре переменные n0 типа integer и
Fname, Path типа string. Переменные Fname, Path будут
определять имя файла с текстом запроса и полный путь к этому файлу соответственно. Переменная n0 будет определять номер выбранного пункта в списке ComboBox1, поэтому в начале выполняемой
части процедуры должен быть оператор
n0:= ComboBox1.ItemIndex;
Далее должны идти условные операторы определяющие выбор одного из файлов с текстами сохраненных вами запросов в зависимости
от значения n0; эти операторы имеют вид:
if n0=0 then
Fname:='BksDr.sql';
Число этих операторов должно соответствовать числу пунктов в
списке ComboBox1.
Далее, в конце процедуры должны быть следующие операторы
Path:=dbn+Fname;
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(Path);
Первый из этих операторов определяет полный путь к файлу с текстом запроса, второй очищает поле компонента Memo1, третий загружает в него текст запроса из этого файла.
13
4) Создайте обработчики события OnClick для кнопок OpenQuery,
CloseQuery и напишите для них программный код.
В первом из них должна быть предусмотрена предварительная проверка наличия текста в поле Memo1, а в случае отсутствия текста
должно выдаваться сообщение на экран «Текст запроса отсутствует»,
после чего предусмотреть завершение данной процедуры. Свойству
Query1.SQL должно быть присвоено значение, содержащееся в компоненте Memo1 и должен быть выполнен запуск запроса на выполнение с помощью одного из операторов
Query1.Open;
или
Query1.Active:=True;
Второй из этих обработчиков должен закрывать запрос с помощью
одного из операторов
Query1.Close;
или
Query1.Active:=False;
5) Сохраните проект. Скомпилируйте проект и исправьте обнаруженные ошибки. После исправления ошибок выполните приложение.
Используя разработанный интерфейс, выберите из списка поочередно каждый из запросов, запустите на выполнение и просмотрите результаты.
14
Задание 3. Создание многотабличных запросов на
выборку данных.
В настоящем задании предлагается создать базу данных «Поставки»
в формате Paradox 7, разработать запросы на выборку к базе данных и приложение для работы с запросами.
Таблицы базы данных должны иметь следующую структуру:
1. Post (Поставщики)
Назначение поля
Имя поля Тип данных
Код поставщика
Название поставщика
CodeP
NameP
Short
Alpha
Размер поля Ключ
*
50
2. Grps (Группы товаров)
Назначение поля
Имя поля
Тип данных
Код группы
Имя группы
CodeGr
NameGr
Short
Alpha
Размер поля
Ключ
*
50
3. TypeTovs (Типы товаров)
Назначение по- Имя поля
ля
Тип данных
Код типа
Имя типа
Short
Alpha
50
Размер поля
CodeType
NameType
Размер поля
Ключ
*
4. Tov (Товары)
Назначение поля
Имя поля
Тип данных
Код товара
Код группы
Код типа
Модель
Отпускная цена
CodeТ
CodeGr
CodeType
Model
OtpCena
Short
Short
Short
Alpha
Money
Ключ
*
30
15
5. Cln (клиенты)
Назначение поля
Имя поля
Тип данных
Размер поля
Код клиента
Фамилия
Имя
Отчество
Адрес
CodeCl
FamCl
NameCl
ОtchCl
Adres
Short
Alpha
Alpha
Alpha
Alpha
50
50
50
50
Размер поля
Ключ
*
6. Sotr (Сотрудники)
Назначение поля
Имя поля
Тип данных
Код сотрудника
Фамилия
Имя
Отчество
Год рождения
Должность
CodeS
FamS
NameS
ОtchS
YearBirth
Dolgn
Short
Alpha
Alpha
Alpha
Short
Alpha
Ключ
*
50
50
50
50
7. Zak (Заказы)
Назначение поля
Имя поля
Тип данных
Код заказа
Код товара
Код поставщика
Код клиента
Код сотрудника
Торговая надбавка(%)
Стоимость доставки
CodeZ
CodeТ
CodeP
CodeCl
CodeS
TorgN
StDost
Short
Short
Short
Short
Short
Number
Money
16
Размер поля Ключ
*
Срок доставки(дней)
Срок гарантии (лет)
Количество изделий
Дата заказа
SrDost
SrGar
Qty
DateZ
Short
Number
Short
Date
Ввести данные в таблицы (см. ниже) и получить следующую информацию с помощью запросов на выборку данных:
1. Вывести список фирм-поставщиков, поставляющих факсы.
2. Вывести список моделей товаров, имеющихся не менее чем в 2 заказах.
3. Вывести список заказов на ксероксы, для которых количество изделий в каждом заказе не менее 20. В список включить номер заказа,
наименование поставщика, модель товара, количество заказанных
изделий.
4. Вывести список заказов, включающий заказы на ксероксы, для которых количество изделий в каждом заказе составляет от 20 до 40
включительно и заказы на факсы, для которых срок гарантии составляет не менее 2 лет. В результаты запроса включить те же поля, что и
в п.3. Решить задачу двумя способами:
а) объединить необходимые условия отбора в предложении WHERE;
б) создать два простых запроса и объединить их оператором UNION.
5. Вывести все данные о клиентах, сделавших заказы в 2006 году.
6. Вывести все данные о клиентах, сделавших заказы как в 2006 году,
так и в 2007 году.
7. Вывести все данные о заказах, сделанных одним и тем же клиентом
у различных поставщиков.
8. Вывести суммарный объем заказов по каждой группе товаров, для
которых оптовая цена находится в диапазоне значений от 10000 р. до
30000 р.
9. Вывести суммарный объем заказов по каждому типу и группе товаров (Ксерокс Персональный и т. д.) при условии, что срок гарантии
не менее 1,5 года.
10.Вывести список групп товаров, в котором указать максимальную и
минимальную стоимость одного изделия MaxCost1, MinCost1 (с учетом торговой надбавки и стоимости доставки) для каждой группы по
всем заказам, куда входят товары данной группы.
11.Вывести суммарный объем заказов по каждому типу товаров при
условии, что заказано не менее 10 изделий данного типа.
12.Вывести список всех заказов, в который включить номер (код) заказа, название группы товара, модель товара, стоимость заказа Cost
17
(вычисляемое поле). Отсортировать результаты по группам товара в
алфавитном порядке и по стоимости заказа в порядке убывания.
13.Вывести список поставщиков, имеющих заказы со сроком гарантии
не менее 1.5 года. В результатах запроса отобразить название фирмы- поставщика и среднюю для данного поставщика стоимость заказов AvgCost, удовлетворяющих указанному условию.
14.Вывести список товаров (ксероксов и факсов) класса не ниже 400, но
ниже 500, т.е. у которых в наименовании модели товара стоит число
не меньше 400, но меньше 500. В список включить модель товара и
среднюю стоимость одного изделия AvgCost1 каждой модели по
всем заказам, в которые она входит.
15.Вывести список клиентов, имеющих заказы, отличающиеся по стоимости не менее чем на 100000 р.
Методические указания:
I.
Создание структуры БД и ввод данных
1. Создать в своей личной папке две папки с именами Postavki,
PostAppl, первая из которых предназначена для хранения базы данных, а вторая – для приложения.
2. Запустить Database Desktop. Установить рабочий каталог Postavki.
Аналогично заданию 1 создать таблицы Post, Grps, TypeTovs, Tov,
Cln, Sotr, Zak с описанной выше структурой и сохранить в рабочем
каталоге.
3. Установить режим ссылочной целостности данных между созданными таблицами следующим образом:
Главная таблица
Дочерняя таблица Поля связи
Grps
Tov
CodeGr
TypeTovs
Tov
CodeType
Post
Zak
CodeP
Tov
Zak
CodeT
Cln
Zak
CodeCl
Sotr
Zak
CodeS
Для установления этого режима необходимо сделать следующее:
3.1. Открыть дочернюю таблицу (Tov) в окне Database Desktop и
перейти в режим изменения структуры с помощью команды Table/Restructure.
18
3.2. Открыть список Table properties и выбрать из него элемент
“Referential Integrity”. Нажать кнопку Define.
3.3. В окне Referential Integrity выбрать из левого списка поле CodeGr и нажать кнопку →
3.4. В том же окне выбрать из правого списка главную таблицу
Grps и нажать кнопку ←.
3.5. В том же окне установить переключатель Cascade и метку в
поле Strict Referential Integrity. Нажать кнопку OK.
3.6. В следующем окне ввести имя связи между таблицами (GT).
Нажать кнопку ОК и сохранить таблицу.
Аналогичные действия выполнить для остальных пар таблиц.
4. Введите в таблицы следующие данные:
Post
CodeP
NameP
Антарес
Вист
Лик-НН
Логрус
Макрос
Росс
Технион
1
2
3
4
5
6
7
Grps
CodeGr
1
2
3
NameGr
Ксерокс
Факс
Принтер
TypeTovs
CodeType
NameType
19
Персональный
Персональный_Плюс
Деловой
Профессиональный
Профессиональный_Плюс
1
2
3
4
5
Tov
CodeТ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CodeGr
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
2
CodeType
1
2
3
3
4
5
5
1
1
2
2
3
4
4
5
5
Model
C110GLS
C200GLS
C300GLS
C310GLS
C400GLS
C450GLS
C500GLS
F100G
F150G
F200G
F250G
F300G
F400G
F450G
F500G
F600G
OtpCena
9900.00
14300.00
24700.00
29650.00
42700.00
51240.00
73780.00
16080.00
18400.00
19300.00
20760.00
25510.00
35130.00
38150.00
48780.00
62100.00
Cln
CodeCl
FamCl
NameCl
OtchCl
1
Андронов
Александр Александрович Нижний Новгород
2
Борисов
Дмитрий
Иванович
Нижний Новгород
3
Грибов
Георгий
Эдуардович
Арзамас
4
Денисов
Григорий
Алексеевич
Дзержинск
5
Железняков Владимир
Васильевич
Кстово
20
Adres
CodeCl
FamCl
NameCl
OtchCl
Adres
6
Зайцев
Виталий
Петрович
Арзамас
7
Литвинчук Алексей
Алексеевич
Нижний Новгород
8
Лапин
Виктор
Владимирович
Нижний Новгород
9
Сидоров
Александр Михайлович
Нижний Новгород
Sotr
CodeS FamS
NameS
OtchS
YearBirth
Dolgn
1
Антонов
Александр
Владимирович
1940 Директор
2
Петров
Иван
Васильевич
1951 Главный инженер
3
Васильев Эдуард
Георгиевич
1948 Зам. Директора
4
Федоров
Николай
Иванович
1943 Зам. Директора
5
Сидоров
Павел
Петрович
1959 Начальник отдела
6
Павлов
Григорий
Антонович
1957 Начальник отдела
7
Лямин
Алексей
Алексеевич
1945 Начальник цеха
8
Яковлев
Олег
Павлович
1950 Начальник цеха
9
Бурков
Георгий
Антонович
1973 Агент
10
Григорьев Яков
Федорович
1969 Агент
11
Федоров
Николай
Иванович
1973 Агент
12
Горбунов Виталий
Олегович
1971 Агент
13
Козлова
Вера
Валентиновна
1974 Агент
14
Семенов
Алексей
Ильич
1970 Агент
15
Шаров
Антон
Александрович
1975 Агент
21
Zak
CodeZ CodeТ CodeP CodeCl CodeS TorgN StDost SrDost SrGar Qty DateZ
1
1
1
4.0
30
7
1
10 01.11.2006
2
9
2
2
4
2
10
3.9
44
8
1.5
5
10.11.2006
3
3
2
1
9
3.5
25
12
1.5
20
15.11.2006
4
3
3
7
9
3.5
33
10
2
25
05.12.2006
5
4
5
5
11
3.6
42
14
2
30
08.12.2006
6
4
6
3
10
2.8
20
14
2
50
10.12.2006
7
5
3
5
12
3.8
27
10
2
15
12.12.2006
8
6
4
4
12
4.9
34
6
3
25
15.12.2006
9
6
7
3
13
4.7
39
5
1
40
10.01.2007
10
7
2
1
12
4.2
45
8
1.5
35
12.01.2007
11
8
2
8
13
3.1
31
12
2.5
30
13.01.2007
12
8
5
8
9
3.9
48
9
1
10
18.01.2007
13
9
1
7
13
4.5
15
8
2
10
20.01.2007
14
12
1
2
14
3.7
23
15
2.5
20
25.01.2007
15
12
1
2
14
4.1
20
10
2
25
31.01.2007
22
16
13
6
1
15
4.2
14
12
1.5
35
01.02.2007
17
16
3
5
15
3.6
33
8
1
45
10.02.2007
18
16
3
5
15
4.5
15
8
1
10
25.02.2007
23
5. Создайте в Delphi новый проект.
6. Сделайте заголовок формы (свойство Caption) «Просмотр и редактирование данных».
7. Добавьте на форму 3 кнопки, введите для них надписи (свойство
Caption) OpenTable, CloseTable, Exit. Нажатие кнопки Exit должно
завершать работу приложения – для этого создайте соответствующий обработчик события OnClick.
8. Сохраните проект в папке PostAppl:
а) сохраните модуль под именем UprData;
б) сохраните проект под именем MultiTab.
9. Разместите на форме компоненты Table, DataSource, DBGrid и задайте их свойства согласно таблице:
Компонент
DataSource
DBGrid
Свойство
DataSet
DataSource
Значение
Table1
DataSource1
10.Добавьте на форму компонент ComboBox1, который будет использоваться для хранения списка таблиц БД.
11.Опишите глобальные переменные dbn, tn1, tn2, tn3, tn4, tn5, tn6, tn7
типа string в разделе interface после оператора
var
Form1: TForm1;
Переменная dbn содержит путь к каталогу БД, а переменные , tn1,
tn2, tn3, tn4, tn5, tn6, tn7 – имена файлов, в которых будут храниться
таблицы БД.
12.Cоздайте обработчик события FormCreate для главной формы проекта и введите в него операторы:
dbn:='I:\...\Postavki\';
tn1:='Post.DB';
Аналогичные операторы введите для присвоения значений переменным tn2, tn3, tn4, tn5, tn6, tn7. Далее, в той же процедуре введите
операторы для присвоения элементам списка ComboBox1 значений
переменных tn1, tn2, tn3, tn4, tn5, tn6, tn7 (см. задание 2).
13.Cоздайте обработчик события OnClick для списка ComboBox1 и введите в него операторы:
tn:= ComboBox1.Items[ComboBox1.ItemIndex];
Table1.TableName:=tn;
Переменную tn необходимо описать внутри данной процедуры. Она
будет содержать значение выбранного элемента списка, т.е. имя од24
ной из таблиц БД (см. первый из двух приведенных выше операторов). Второй из этих операторов связывает компонент Table1 с
выбранной таблицей БД.
14. Создайте обработчики событий OnClick для кнопок OpenTable,
CloseTable. Аналогично заданию 1, эти кнопки служат для открытия
и закрытия таблицы. Кроме того, для корректной работы приложения необходимо сделать так, чтобы при открытой таблице список
ComboBox1 был недоступен, а при закрытой – доступен. Поэтому в
обработчики событий OnClick для этих кнопок необходимо ввести
следующие операторы:
Table1.Active:=True;
ComboBox1.Enabled:=False;
- для кнопки OpenTable
Table1.Active:=False;
ComboBox1.Enabled:=True;
- для кнопки CloseTable
II.
Создание и тестирование запросов.
Особенность запросов, формируемых в этом задании, заключается в
том, что в них участвуют несколько таблиц. При этом используется внутреннее объединение таблиц (см. соответствующую тему в лекциях), которому соответствует условие отбора, включающее связанные поля обоих
таблиц. Например, если в запросе используются таблицы Grps, Tov из
данного задания, связанные через поле CodeGr, то запрос должен включать
условие отбора
Grps. CodeGr = Tov. CodeGr.
При этом во всех случаях, когда в запросе используются поля из разных таблиц, имеющие одинаковые имена, необходимо указывать полное
наименование поля, т.е. с указанием имени таблицы, так же как в приведенном выше условии отбора.
Запросы, которые требуется создать в пп. 3-6 настоящего задания,
включают в себя вычисляемые поля:
S1 = C0*(1+0,01*p)+Sd – стоимость изделия
Sz = (C0*(1+0,01*p)+ Sd)*Q – стоимость заказа
где C0 - Отпускная цена,
25
p - торговая надбавка(%),
Sd - cтоимость доставки
Q - количество изделий.
При составлении запросов в выражения для вычисляемых полей вместо приведенных обозначений необходимо подставить названия соответствующих полей из таблиц. Рекомендуется также создать псевдонимы для
вычисляемых полей (эти псевдонимы указаны в соответствующих пунктах
задания).
Для создания запросов используется Database Desktop, причем порядок действий полностью аналогичен рассмотренному в задании 2 с учетом
изменения имен каталогов и файлов.
Для работы с запросами создается новая форма и соответствующий
модуль, аналогичные тем, которые были разработаны в задании 2. Отличия
от задания 2 будут в названиях файлов, в которых хранятся запросы и в
ссылке на главный модуль.
III. Создание формы для работы с запросами.
Запустить Delphi и открыть проект MultiTab. Создать новую форму с помощью команды File/New Form. Сделать заголовок формы «Запросы на
выборку данных» (свойство Caption) и разместить на ней следующие компоненты:
1. 3 стандартных кнопки (Button1, Button2, Button3). Сделать надписи
этих кнопок (свойство Caption) OpenQuery, CloseQuery, Exit.
2. В верхней части окна формы добавить метку (Label1) и непосредственно под ней комбинированный список (ComboBox1). Сделайте
надпись (свойство Caption) на этой метке «Список запросов»
3. Ниже добавить метку (Label2) и непосредственно под ней многострочный редактор (Memo1). Задайте отображение полос прокрутки
у компонента Memo1, установив свойство ScrollBars – ssBoth. Сделайте надпись (свойство Caption) на этой метке «Текст запроса».
4. Ниже добавить метку (Label3) и непосредственно под ней компонент DBGrid1. Сделайте надпись (свойство Caption) на этой метке
«Результаты запроса».
5. Добавить на форму невизуальные компоненты Query1, DataSource1.
Установите свойство компонента DataSource:
a. DataSet (имя набора данных) – Query1.
26
b. Установите свойство компонента DBGrid:
c. DataSource – DataSource1.
Сохраните проект и назовите новый модуль Queries
6. Перейдите на форму Form1 и добавьте кнопку, установите для нее
свойство Caption - Select
7. Используя команду File/Use Unit введите в модуль Queries оператор
uses UprData;
а в модуль UprData оператор
uses Queries;
8. Кнопка Select на главной форме (Form1) должна обеспечивать переход на форму «Запросы на выборку данных» (Form2). Поэтому для
этой кнопки создайте обработчик события OnClick и включите в него оператор
Form2.ShowModal;
9. Кнопка Exit, созданная в п.1), должна обеспечивать закрытие формы
«Запросы на выборку данных» и переход на главную форму. Поэтому создайте для этой кнопки обработчик события OnClick и включите в него оператор
Close;
10.Проверьте переходы между формами. Сохраните проект.
IV. Разработка программного кода и организация интерфейса для работы с запросами.
1. Для заполнения списка запросов при создании соответствующей
формы (Form2), создайте обработчик события FormCreate для этой
формы и включите в него операторы вида
ComboBox1.Items.Add(‘Поставщики факсов’);
Количество этих операторов и значения строковых констант в скобках (названия запросов) определяются количеством и содержанием
создаваемых запросов (см. пп.1-15 текста задания).
Для того, чтобы указать, к какой БД будет обращаться запрос
Query1, включите в обработчик события FormCreate оператор
Query1.DatabaseName:=dbn;
2. Создайте обработчик события OnClick для компонента ComboBox1.
При выполнении этой процедуры пользователь выбирает из списка
имя одного из запросов, в результате чего текст этого запроса должен загрузиться в редактор Memo1.
Опишите в этой процедуре переменные n0 типа integer и
Fname, Path типа string. Переменные Fname, Path будут
определять имя файла с текстом запроса и полный путь к этому фай27
лу соответственно. Переменная n0 будет определять номер выбранного пункта в списке ComboBox1, поэтому в начале выполняемой
части процедуры должен быть оператор
n0:= ComboBox1.ItemIndex;
Далее должны идти условные операторы определяющие выбор одного из файлов с текстами сохраненных вами запросов в зависимости
от значения n0; эти операторы имеют вид:
if n0=0 then
Fname:='PostFax.sql';
Число этих операторов должно соответствовать числу пунктов в
списке ComboBox1.
Далее, в конце процедуры должны быть следующие операторы
Path:=dbn+Fname;
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(Path);
Первый из этих операторов определяет полный путь к файлу с текстом запроса, второй очищает поле компонента Memo1, третий загружает в него текст запроса из этого файла.
3. Создайте обработчики события OnClick для кнопок OpenQuery,
CloseQuery и напишите для них программный код.
В первом из них свойству Query1.SQL должно быть присвоено значение, содержащееся в компоненте Memo1. Далее должна быть
предусмотрена предварительная проверка наличия текста в поле
Memo1, а в случае отсутствия текста должно выдаваться сообщение
на экран «Текст запроса отсутствует», после чего предусмотреть завершение данной процедуры. Наконец, должен быть выполнен запуск запроса на выполнение с помощью одного из операторов
Query1.Open;
или
Query1.Active:=True;
Второй из этих обработчиков должен закрывать запрос с помощью
одного из операторов
Query1.Close;
или
Query1.Active:=False;
4. Сохраните проект. Скомпилируйте проект и исправьте обнаруженные ошибки. После исправления ошибок выполните приложение.
Используя разработанный интерфейс, выберите из списка поочередно каждый из запросов, запустите на выполнение и просмотрите результаты.
28
Задание 4. Создание многотабличных запросов на
выборку данных (продолжение)
Настоящее задание является продолжением задания 3 и посвящено
многотабличным запросам на выборку данных более сложной структуры:
запросам с внешним объединением таблиц;
запросам, в состав которых входят подчиненные запросы;
запросам, полученным путем объединения нескольких запросов с
помощью оператора UNION.
Предлагается дополнить базу данных, созданную в задании 3, добавив в нее таблицы со следующей структурой:
ZakDop (Дополнительные сведения о заказах)
Назначение поля
Имя поля
Тип данных Размер поля Ключ
Код заказа
CodeZ
Short
*
Код клиента
CodeCl
Short
Кол-во поставленQtyPost
Short
ных изделий
Дата поставки
DatePost
Date
Cln (клиенты)
Назначение поля
Код клиента
Название клиента
Имя поля Тип данных
CodeCl
Short
NameCl
Alpha
Размер поля
Ключ
*
50
Ввести данные в таблицы (см. ниже) и получить следующую информацию с помощью запросов на выборку данных:
1. Получить список клиентов, не сделавших заказов. Решить задачу
двумя способами:
а) используя подчиненный запрос и предложение NOT IN;
б) используя подчиненный запрос и предложение NOT EXISTS.
2. Вывести список клиентов (без повторяющихся записей), в заказах
которых есть модели товаров C200GLS, C300GLS, F200G, F300G.
Решить задачу двумя способами:
а) используя предложение WHERE, в котором объединены все необходимые условия отбора;
б) используя подчиненный запрос.
29
3. Вывести составной список моделей товаров, в первую часть которого включить модель товара и названия поставщиков этого товара, а
во вторую − модель товара и названия клиентов, заказавших данный
товар. Для объединения обоих частей списка использовать оператор
UNION.
4. Вывести список, который должен включать названия поставщиков и
номера заказов этого поставщика (без повторяющихся записей) при
следующих дополнительных условиях:
а) в список должны входить только названия поставщиков, имеющих заказы;
б) в список должны входить названия всех поставщиков (как
имеющих, так и не имеющих заказы).
В данном пункте задания используются внутреннее и левое внешнее
объединения таблиц.
5. Вывести список, который должен включать номера заказов и соответствующие им названия клиентов при следующих дополнительных
условиях:
а) в список должны входить только названия клиентов, сделавших
заказы;
б) в список должны входить названия всех клиентов (как сделавших, так и не сделавших заказы).
В данном пункте задания используются внутреннее и правое внешнее объединения таблиц.
6. Вывести список моделей товара, который должен включать заказы, в
которых количество заказанных изделий более 20. Составить данный
запрос двумя способами:
а) объединить необходимые условия отбора в предложении
WHERE;
б) используя проверку EXISTS с подчиненным запросом.
7. Вывести список моделей товаров, для которых есть заказы с недопоставкой (количество заказанных изделий больше количества поставленных изделий). Решить задачу двумя способами:
а) используя предложение WHERE, в котором объединены все необходимые условия отбора;
30
б) используя подчиненный запрос.
8. Вывести список заказов, включающий код заказа, модель товара,
наименования поставщика и клиента, количество заказанных изделий при следующих дополнительных условиях:
а) список должен включать только модель товара, на которую существует максимальная отпускная цена;
б) список должен включать только модели товаров, на которые
отпускная цена выше средней по всем моделям товаров.
Методические указания
1. Запустить Database Desktop. Установить рабочий каталог
I:\...\Postavki. Создать таблицы ZakDop, Cln с описанной выше
структурой и сохранить в рабочем каталоге. Установить режим ссылочной целостности данных между таблицами Cln (главная таблица)
и ZakDop (дочерняя таблица) по полю CodeCl (см. задание 3).
2. Запустить Delphi и открыть проект MultiTab из папки
I:\...\PostAppl. Ввести в обработчик события FormCreate главной
формы следующие дополнительные операторы:
tn5:='ZakDop.DB';
tn6:='Cln.DB';
Включить таблицы ZakDop, Cln в список ComboBox1 на главной
форме приложения, для чего ввести в обработчик события
FormCreate соответствующие операторы (см. задание 3, п. I−10)
ComboBox1.Items.Add(tn5);
ComboBox1.Items.Add(tn6);
3. Сохранить проект. Скомпилировать и выполнить приложение. Открыть поочередно каждую из таблиц, щелкнув по кнопке
OpenTable, и ввести в таблицы следующие данные:
31
CodeZ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ZakDop
CodeCl
2
2
1
7
5
3
5
4
3
1
8
8
7
2
2
1
5
5
QtyPost
8
5
17
25
27
36
15
25
33
30
30
10
10
20
25
30
40
10
Cln
CodeCl
1
2
3
4
5
6
7
8
9
DatePost
03.11.2004
11.11.2004
02.12.2004
09.01.2005
13.01.2005
16.01.2005
19.01.2005
25.01.2005
26.01.2005
01.02.2005
03.02.2005
07.02.2005
08.02.2005
08.02.2005
10.02.2005
01.03.2005
10.03.2005
15.03.2005
NameCl
Альфа
Альтаир
Бета
Гамма
Дельта
Омега
Паллада
Процион
Сириус
4. Запустить Database Desktop. Установить рабочий каталог
I:\...\Postavki. Сформировать запросы, соответствующие пп. 1−8 данного задания и сохранить в рабочем каталоге.
5. Дополнить список запросов на соответствующей форме (Form2),
включив в обработчик события FormCreate для этой формы, дополнительные операторы вида
32
ComboBox1.Items.Add(‘Клиенты без заказов1’);
Количество этих операторов и строковые константы в скобках должны соответствовать количеству и содержанию запросов пп. 1−8 данного задания.
6. Добавить в обработчик события OnClick для компонента
ComboBox1 на той же форме необходимое число условных операторов вида
if n0=… then
Fname:='ClBezZak1.sql';
(константы в правых частях этих операторов должны совпадать с
именами файлов, в которых сохранены запросы).
7. Сохранить проект. Скомпилировать проект и исправить обнаруженные ошибки. После исправления ошибок выполнить приложение.
Используя разработанный интерфейс, выбрать из списка поочередно
каждый из запросов, разработанных в настоящем задании, запустить
на выполнение и просмотреть результаты.
9. Продемонстрировать преподавателю полученные результаты.
33
Задание 5. Запросы на модификацию данных
Целью настоящего задания является разработка запросов на добавление, удаление и изменение данных в таблицах БД, а также приложения
для обеспечения интерфейса пользователя и проверки корректности вводимых данных.
Предполагается, что все запросы будут работать с таблицами БД
«Поставки».
1. Создать таблицу ClCopy следующей структуры:
Назначение поля
Код клиента
Название клиента
Имя поля Тип данных
CodeCl
Short
NameCl
Alpha
Размер поля
Ключ
*
50
2. Составить запрос на добавление данных, с помощью которого добавить
в таблицу ClCopy все записи из таблицы Cln.
3. Составить запрос на добавление данных, с помощью которого добавить
в таблицу ClCopy следующие дополнительные данные:
4.
5.
6.
7.
CodeCl
NameCl
10
Орион
11
Пульсар
12
Сигма
Составить запрос на изменение данных, с помощью которого изменить
значение «Пульсар» поля NameCl на значение «Квазар».
Составить запрос на изменение данных, с помощью которого увеличить
на 5 значения поля CodeCl во всех записях таблицы, в которых первоначальные значения этого поля были не менее 10.
Удалить из таблицы ClCopy все записи, в которых значения поля CodeCl не менее 10 с помощью запроса на удаление данных.
Удалить из таблицы ClCopy все записи с помощью запроса на удаление
данных.
34
Методические указания
1. Используя Database Desktop, создать новую таблицу ClCopy. Создать, выполнить и сохранить в базе данных запросы, перечисленные
в пп. 2−7 задания. Порядок работы с запросами на модификацию
данных полностью аналогичен случаю запросов на выборку данных
(см. задания 2,3).
2. Запустить Delphi и открыть проект MultiTab. Создать новую форму с помощью команды File/New Form. Сделать заголовок формы
«Запросы на модификацию данных» (свойство Caption).
3. Добавить на форму 3 стандартных кнопки (Button1, Button2,
Button3). Сделать надписи этих кнопок (свойство Caption)
OpenQuery, CloseQuery, Exit.
4. В верхней части окна формы добавить метку (Label1) и непосредственно под ней комбинированный список (ComboBox1). Сделать
надпись (свойство Caption) на этой метке «Список запросов»
5. Ниже добавить метку (Label2) и непосредственно под ней многострочный редактор (Memo1). Задать отображение полос прокрутки у
компонента Memo1, установив свойство ScrollBars – ssBoth.
Сделать надпись (свойство Caption) на этой метке «Текст запроса».
6. Добавить на форму невизуальный компонент Query1. Сохранить
проект и назовите новый модуль QuMod.
7. Перейти на форму Form1 и добавить кнопку, установить для нее
свойство Caption -−Modify
8. Используя команду File/Use Unit ввести в модуль QuMod оператор
uses UprData;
а в модуль UprData оператор
uses QuMod;
9. Кнопка Modify на главной форме (Form1) должна обеспечивать
переход на форму «Запросы на модификацию данных» (Form3).
Поэтому для этой кнопки создать обработчик события OnClick и
35
включить в него оператор
Form3.ShowModal;
10. Описать в модуле UprData дополнительную глобальную переменную tn7 типа string , а в обработчик события FormCreate
главной формы ввести дополнительные операторы
tn7:='ClCopy.DB';
………………….
ComboBox1.Items.Add(tn7);
11. Кнопка Exit, созданная в п. 1, должна обеспечивать закрытие формы «Запросы на модификацию данных» (Form3) и переход на главную форму. Поэтому создать для этой кнопки обработчик события
OnClick и включить в него оператор
Close;
12. Проверить переходы между формами. Сохранить проект и скопировать папку PostAppl в свою личную папку на сервере.
13. Для заполнения списка запросов при создании соответствующей
формы (Form3), создать обработчик события FormCreate для этой
формы и включить в него операторы вида
ComboBox1.Items.Add('Добавление1');
Количество этих операторов и значения строковых констант в скобках (названия запросов) определяются количеством и содержанием
создаваемых запросов (см. пп. 2−7 текста задания).
Для того чтобы указать, к какой БД будет обращаться запрос
Query1, включить в обработчик события FormCreate оператор
Query1.DatabaseName:=dbn;
14. Создать обработчик события OnClick для компонента
ComboBox1. При выполнении этой процедуры пользователь выбирает из списка имя одного из запросов, в результате чего текст этого
запроса должен загрузиться в редактор Memo1.
Описать в этой процедуре переменные n0 типа integer и Fname,
Path типа string. Переменные Fname, Path будут определять
имя файла с текстом запроса и полный путь к этому файлу соответственно. Переменная n0 будет определять номер выбранного пунк36
та в списке ComboBox1, поэтому в начале выполняемой части процедуры должен быть оператор
n0:= ComboBox1.ItemIndex;
Далее должны идти условные операторы, определяющие выбор одного из файлов с текстами сохраненных вами запросов в зависимости от значения n0; эти операторы имеют вид:
if n0=0 then
Fname:='AddData1.sql';
Число этих операторов должно соответствовать числу пунктов в
списке ComboBox1.
Далее, в конце процедуры должны быть следующие операторы
Path:=dbn+Fname;
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(Path);
Первый из этих операторов определяет полный путь к файлу с текстом запроса, второй очищает поле компонента Memo1, третий загружает в него текст запроса из этого файла.
15. Создать обработчики события OnClick для кнопок OpenQuery,
CloseQuery и написать для них программный код.
В первом из них должна быть предусмотрена предварительная проверка наличия текста в поле Memo1, а в случае отсутствия текста
должно выдаваться сообщение на экран «Текст запроса отсутствует»,
после чего предусмотреть завершение данной процедуры. Свойству
Query1.SQL должно быть присвоено значение, содержащееся в
компоненте Memo1 и должен быть выполнен запуск запроса на выполнение с помощью оператора
Query1.ExecSQL;
Второй из этих обработчиков должен закрывать запрос с помощью
оператора
Query1.Close;
Сохранить проект. Используя разработанный интерфейс, выбрать из
списка поочередно каждый из запросов, запустить на выполнение.
17. Продемонстрировать преподавателю полученные результаты.
37
Список литературы
1. Илюшечкин В.М.Основы использования и проектирования баз данных. Учебное пособие.- М.: Юрайт, 2011.- 288 с.
2. Бобровский С.И. Delphi 7: Учебный курс. – СПб.: Питер, 2008. – 736
с.
3. Цыганков В.М., Мальцев М.Г., Хоменко А.Д. Базы данных. – 6-е
изд., - М.: Питер, 2011.- 736 с.
4. Кириллов В.В. Введение в реляционные базы данных. – 3-е изд., пер.
и доп.- СПб.: BHV, 2009.- 464 с.
5. Пирогов В.Ю. Информационные системы и базы данных. Организация и проектирование – СПб.: BHV, 2009.– 528 с.
6. Рахмелевич И.В. Сборник задач по дисциплине «Базы данных и знаний» для студентов заочного отделения. - Н.Новгород: НКИ, 2006.33 с.
7. Рахмелевич И.В., Салмин С.П., Торгашев А.Б. Язык SQL и его использование в приложениях для баз данных. - Н.Новгород: НКИ,
2006.- 58 с.
Ресурсы INTERNET
1. www.intuit.ru – Интернет-университет информационных технологий
2. www.it.ru.edu – Академия IT
3. www.citforum.ru – центр информационных технологий
38
Оглавление
Введение ............................................................................................................... 3
Задание 1. База данных «Личная библиотечка».............................................. 4
Задание 2. Составление простейших однотабличных запросов на выборку
данных .................................................................................................................. 9
Задание 3. Создание многотабличных запросов на выборку данных. ....... 15
Задание 4. Создание многотабличных запросов на выборку данных
(продолжение).................................................................................................... 29
Задание 5. Запросы на модификацию данных................................................ 34
Список литературы ........................................................................................... 38
39
Рахмелевич Игорь Владимирович
БАЗЫ ДАННЫХ
Практикум
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования «Нижегородский
государственный университет им. Н.И. Лобачевского»
603950, Нижний Новгород, пр. Гагарина, 23.
Подписано в печать . . . Формат 60х84 1/16.
Бумага офсетная. Печать офсетная. Гарнитура Таймс.
Усл. печ. л. 2,5. Уч.-изд. л. Заказ № . Тираж 100 экз.
Отпечатано в типографии Нижегородского госуниверситета им.
Н.И. Лобачевского
603600, г. Нижний Новгород, ул. Большая Покровская, 37
40
Download