Тема: Создание запросов и отчетов с помощью «Wizards», исследование словаря базы данных
Задание: создать запрос с помощью Мастера в виде таблицы и графика, создать отчет с помощью Мастера, проанализировать словарь своей базы данных.
Выполнение:
1. Создадим запрос с помощью Мастера в виде таблицы. На 1-м шаге в качестве источника запроса выберем таблицу sotrudniki. Шаг №2 Мастер пропускает, так как создаваемый запрос не является Cross-Tab Wizard. На 3-м шаге в качестве условия выборки назначим Мастеру выбрать информацию из таблицы о тех сотрудниках, у которых не заполнены поля «Почта» или «Дата рождения» (см.рис.7.1):
Рис.7.1. Создание запроса-таблицы с помощью Мастера.
Завершим создание запроса сохранением его в папку Query проекта. Результат выполнения данного запроса представлен на рис.7.2:
Рис.7.2. Результат выполнения запроса.
2. Создадим запрос с помощью Мастера в виде графика. В качестве источника запроса на 1-м шаге выберем таблицы sotrudniki и dolgnosty. На 2-м шаге в раздел Data Series поместим Dolg_id, в Axes – Sotr_id, учитывая, что возможно работать только с полями типа Numeric. На 3-м шаге зададим тип диаграммы – объемная столбчатая. Завершим создание запроса выбором его типа – Form - и сохранением его в папку Query проекта.
Рис.7.3. Результат выполнения запроса.
3. Чтобы полученные запросы можно было вызывать из формы, добавим на одну из ранее созданных форм две кнопки «Запрос 1» и «Запрос 2» (см.рис.7.4) и запрограммируем их следующим образом:
Листинг 7.1. Коды кнопок вызова запросов.
&&вызов запроса-таблицы
DO 'd:\militsina\query\SOTR_MAIL_BIRTH_BLANK.qpr'
&&вызов запроса-графика
DO FORM 'd:\militsina\forms\SOTRUDNIKI_PO_DOLGNOSTYAM'
Рис.7.4. Форма с кнопками вызова запросов.
4. Создадим с помощью Мастера отчет. На 1-м шаге в качестве источника выберем таблицу sotrudniki (все поля). На 2-м шаге определим способ группировки записей в отчете – по полю dolg_id. На 3-м шаге выберем тип оформления отчета – banded - и продолжим формирование стиля на 4-м шаге. На 5-м шаге зададим тип сортировки записей – по полю dolg_id и sort_id. Завершим создание отчета сохранением его в папку проекта Reports. Результат выглядит следующим образом (см.рис.7.5):
Рис.7.5. Отчет, созданный Мастером.
5. Исследуем контейнерный файл базы данных создаваемого курсового проекта. Для этого откроем из папки проекта файл course_data.dbc командой USE <путь к файлу>, затем – BROWSE, при этом все файлы проекта закрыты (см.рис.7.6). В результате анализа словаря базы данных можно заключить следующее:
А) Общее количество объектов базы данных – 147
Б) Каждый объект имеет имя и тип (база, таблица, индекс и др.)
В) Каждый объект имеет «родителя»: таблица – базу данных, к которой она принадлежит, поле или индекс – таблицу, в которой содержится; примечательно, что поле, являющееся в таблице первичным или вторичным ключом, отображается в словаре дважды – как обычное поле и как индекс.
Рис.7.6. Содержимое файла course_data.dbc.
ЛАБОРАТОРНАЯ РАБОТА №8.
Тема: SQL – запросы.
Задание: ознакомиться с синтаксисом SQL-запросов, сформировать базу данных для своего проекта (таблицы должны быть в НФБК или 4 НФ).
1. Сформулировать и реализовать запросы следующих типов:
а) сравнение условий поиска
б) сложные условия поиска
в) диапазон (BETWEEN)
г) условие поиска с проверкой вхождения во множество ([NOT]IN)
д) условие поиска с указанием шаблонов (LIKE/ NOT LIKE)
2. Сформулировать и реализовать запросы следующих типов:
а) сортировка по значению одного столбца
б) сортировка по нескольким столбцам
в) условия для вычисления полей
г) условие, которое позволяет выполнить группировку по каким–либо критериям
3. Сформулировать и реализовать запросы следующих типов:
а) условие вычисление среднего значения для вашего столбца (может быть для зарплаты, количества и т.п.);
б) условие для счета количества строк;
в) условие для определения максимального значения;
г) условие для определения минимального значения;
д) условие для выполнения суммирования значений
4. Сформулировать и реализовать запросы следующих типов:
а) условие для вашего ограничения
5. Сформулировать и реализовать запросы следующих типов:
а) подзапрос для проверки неравенств;
б) подзапрос с использованием предиката IN
6. Создать подзапрос с использованием ключевых слов ANY или ALL
7. Создать простое соединение таблиц
8. Создать условия для объединения результатов выборки
Выполнение:
1. Разместим на предварительно созданную форму «Запросы» 20 надписей Label и 2 объекта CommandGroup - по 10 кнопок каждый (см.рис.8.1). Также добавим на форму элемент OptionGroup, который позволит пользователю управлять первым запросом. Все кнопки запрограммируем таким образом, чтобы при нажатии они выдавали результаты прописанного в коде SQL-запроса без сохранения их в другую таблицу (см.листинги 8.1-8.20).
Рис.8.1. Форма «Запросы» в режиме Конструктора.
Листинг 8.1. Запрос 1.
IF thisform.optiongroup1.option1.Value = 1
SELECT film_id, fname, price ;
from films ;
where price > 220;
ELSE
SELECT film_id, fname, price ;
from films ;
where price < 220;
ENDIF
Листинг 8.2. Запрос 2.
SELECT film_id, fname, price ;
from films ;
where country_pr = "Россия";
Листинг 8.3. Запрос 3.
SELECT film_id, fname, price, country_pr ;
from films ;
where (country_pr like 'США') AND (price > 220) ;
Листинг 8.4. Запрос 4.
SELECT film_id, fname, price ;
from films ;
where price between 220 AND 240;
Листинг 8.5. Запрос 5.
SELECT firstname, midname, lastname, birth_date ;
FROM clients ;
WHERE ALLTRIM(midname) in ('Иван','Владислав');
Листинг 8.6. Запрос 6.
SELECT emp_id, firstname, midname, lastname ;
FROM workers ;
WHERE firstname like 'М%' ;
Листинг 8.7. Запрос 7.
SELECT login, password ;
FROM access_table;
ORDER BY login DESC ;
Листинг 8.8. Запрос 8.
SELECT film_id, fname, price, genre_id ;
FROM films ;
ORDER BY genre_id ASC, price DESC ;
Листинг 8.9. Запрос 9.
SELECT cl_id, firstname + midname + lastname as FIO, birth_date ;
FROM clients ;
Листинг 8.10. Запрос 10.
select firstname, midname, lastname ;
from workers ;
where firstname like 'М%' ;
union (select firstname, midname, lastname ;
from clients ;
where firstname like 'М%' )
Листинг 8.11. Запрос 11.
SELECT AVG(price) as AVGprice ;
FROM films;
Листинг 8.12. Запрос 12.
SELECT COUNT(*) as ClientsRowQuantity ;
FROM clients ;
Листинг 8.13. Запрос 13.
SELECT MAX(price) as MAXprice ;
FROM films ;
Листинг 8.14. Запрос 14.
SELECT MIN(price) as MINprice ;
FROM films ;
Листинг 8.15. Запрос 15.
SELECT SUM(all price) as SUMprice ;
FROM films ;
Листинг 8.16. Запрос 16.
SELECT A.pos_id, COUNT(A.emp_id) as QuantityOfWorkes ;
FROM workers A ;
GROUP BY A.pos_id ;
HAVING A.pos_id = 8 ;
Листинг 8.17. Запрос 17.
SELECT emp_id, firstname, midname, lastname, pos_id ;
FROM workers ;
WHERE pos_id = (select pos_id ;
FROM positions ;
WHERE ALLTRIM(position) = 'Менеджер' ) ;
Листинг 8.18. Запрос 18.
SELECT genre as GenreFromUSA ;
FROM genres ;
WHERE genre_id in (SELECT distinct genre_id ;
FROM films ;
WHERE country_pr like 'США');
Листинг 8.19. Запрос 19.
SELECT film_id, fname, price ;
FROM films ;
WHERE price > any ( select price ;
FROM films ;
WHERE country_pr = 'США' );
Листинг 8.20. Запрос 20.
SELECT film_id, fname, a.genre_id, genre ;
FROM films a, genres b ;
WHERE a.genre_id = b.genre_id ;
Заключение
В результате выполнения данного комплекса лабораторных работ мною были приобретены такие навыки работы с СУБД, как создание таблиц, объединение их в базу данных, установление связей между таблицами, проектирование графического интерфейса проекта с использованием базовых классов СУБД, разработка библиотек пользовательских классов, организация взаимодействия объектов различных классов, программирование процесса идентификации пользователя, создание запросов и отчетов с помощью Мастера и Конструктора, написание SQL-запросов. Комплекс лабораторных работ позволил создать основу для курсового проекта по дисциплине «Базы данных».
Список литературы:
1. FoxPro Tutorial http://www.yaldex.com/fox_pro_tutorial
2. Справка по языку Fox Pro http://www.firststeps.ru/foxpro/helpfox/helpfox1.html
3. Форум на сайте FoxPro Club http://forum.foxclub.ru
4. Клепинин В.Б., Агафонова Т.П. Visual FoxPro 9.0.– СПб.: изд. BHV, 2007. http://www.foxclub.ru/vfpbook/
5. Сайт Базы данных http://li.romab.ru/t_pers_db_4.html
6. Статья «Visual Foxpro : Иллюстрированный самоучитель» http://programming-lang.com/html/foxpro_7/index.html