Яндекс.Метрика

Последние материалы

Лабораторная работа №18 Проектирование системы управления базами данных в Delphi по технологии ADO.

Лабораторная работа №18
Проектирование системы управления
базами данных в Delphi по технологии ADO.
1. Разработка базы данных в Ms Access.
В данной работе будем рассматривать возможности доступа к базам данных посредством только одной технологии – ADO (Active Data Objects), разработанной Microsoft.
Создадим базу данных магазина компьютерной литературы, состоящую из одной таблицы. Таблица как и двумерный массив состоит из столбцов и строк. Каждый столбец таблицы представлен одним полем, например, названием книги или автором. Каждая строка таблицы содержит одну запись состоящую из нескольких полей, содержащих, например, название книги, автора, цену, год выпуска.
Запустите Microsoft Office Access. В меню нажмите Файл/Создать и далее в мастере выберите Новая база данных. Вам будет предложено выбрать место хранения базы и имя файла. Укажите путь к вашему первому будущему приложению (где в дальнейшем будете сохранять проект Delphi) и осмысленное имя для базы данных магазина компьютерной литературы, например, mkl.mdb. Откроется окно организации работы с базой данных. Выберите двойным кликом мыши пункт «Создание таблицы в режиме конструктора» – откроется конструктор таблицы, в котором следует задать наименование полей таблицы и тип данных содержащихся в соответствующих полях.
Пример описания полей таблицы смотрите на рисунке ниже. Пусть в таблице будет шесть полей. В Access именам полей можно давать наименование, как на английском, так и на русском языках. Наименование полей №№2-5 очевидно, так же как и тип данных этих полей. Разберем поле №1. Наименование поля: id_kn – идентификатор книги. Это поле имеет для базы особое значение – это поле ключевое в таблице, оно несет неповторимый идентификатор записи. Установить опцию «Ключевое поле» можно через контекстное меню, возникающее при нажатии правой клавишей мыши на соответствующем поле в конструкторе таблицы. Сохраните таблицу, нажав на клавишу сохранения, вам будет предложено выбрать имя для таблицы – установите имя магазин.

Через меню Вид установите просмотр в Режим таблицы:
Таблица уже готова для заполнения, но мы сейчас не будем этим заниматься, так как основная наша цель состоит в изучении возможностей Delphi по управлению базами данных. Создадим приложение в Delphi и там уже и будем заниматься редактированием таблицы.
2. Создание приложения для базы данных
Итак, запустите Delphi, создайте новое приложение и сохраните проект в папку, где находится файл базы данных. Пусть имя модуля будет magazin.pas, а имя проекта ProjectMagazin. dpr. Теперь давайте определимся, какие компоненты с палитры необходимы для работы с базой данных. База данных состоит из таблиц, для просмотра которых необходим соответствующий визуальный компонент – DBGrid с вкладки Data Controls. Кроме того должны быть еще компоненты, которые обеспечивают связь приложения с местом расположения базы данных, распознают ее формат, делают выборку из определенной таблицы базы данных. Для этих целей используем следующие три компонента: ADOConnection и ADOTable с вкладки ADO и DataSource с вкладки Data Access.



Настроим свойства всех компонентов на форме.
1. ADOConnection1. Дважды кликните по компоненту (или в инспекторе объектов по строке свойства ConnectionString) – вам представится возможность ввести строку подключения (Use Connection String), запустите мастер нажатием клавиши Build и на вкладке «Поставщик данных» выберите драйвер подключения к базам данных Microsoft Jet OLE DB Provider. Нажмите «Далее» для перехода на вкладку «Подключение» и там, в строке «Выберите или введите имя базы данных», наберите имя файла – в нашем случае это mkl.mdb. Можно, конечно, нажать на клавишу рядом со строкой и непосредственно указать на файл, но, в этом случае, лучше сразу убрать путь к файлу, оставив только имя, чтобы при переносе приложения в другое место не возникло проблем с доступом к базе данных. Нажмите OK в мастере и OK на форме выбора строки подключения. Свойство LoginPromt переключите в False, чтобы каждый раз при подключении к базе данных к пользователю не было запроса о пароле.
2. ADOTable1. В свойстве Connection в выпадающем списке укажите на ADOConnection1, в свойстве TableName выберите таблицу (у нас она пока одна магазин). Свойство Active переведите в положение True (обратите внимание, что в дальнейшем при смене настроек вам часто придется это свойство возвращать в положение True). И, для удобства, переименуйте компонент в TableMagazin.
3. DataSource1. У этого компонента-посредника необходимо свойство DataSet установить в выпадающем списке на таблицу TableMagazin.
4. DBGrid1. Свяжем сетку с DBGrid1 с таблицей магазин из базы данных посредством DataSource1, установив в инспекторе объектов для свойства DataSource в выпадающем списке доступных компонентов DataSource1.
На этом создание простейшей базы данных закончено, запустите приложение.

Добавьте на форму компонент DBNavigator с вкладки Data Controls, подсоедините используя посредник DataSource1 – укажите на него в свойстве DataSource. По необходимости можно некоторые клавиши из панели управления базой данных отключить в свойстве VisibleButtons. И, хотя кнопки управления интуитивно понятны, имеется возможность снабдить их всплывающими подсказками, для чего установите свойство ShowHint в True, а текст подсказок можно установить/изменить в свойстве Hints.
Пока СУБД достаточно проста компоненты доступа к таблицам базы данных допустимо размещать непосредственно на главной форме. Но в дальнейшем вы будете усложнять приложение, будут появляться новые формы и новые компоненты доступа к базе данных, будет увеличиваться количество таблиц в базе данных, что будет усложнять работу. Разумно будет разместить все компоненты доступа к базе данных в одном месте – в Delphi для этих целей предназначена специальная форма: форма Модуля Данных. Эта форма не отображается во время работы приложения. Для создания такой формы следует пройти такой путь в меню: File / New / Form – у вас возникнет новая и пока пустая форма.
Заберите компоненты ADOConnection1, TableMagazin и DataSource1 с главной формы приложения и вставьте их в форму модуля данных. Форма модуля данных по умолчанию имеет не очень удобное (длинное) имя – DataModule1. В дальнейшем мы будем обращаться к нему, поэтому давайте сразу переименуем этот компонент в DM – лаконично, удобно помнить и набирать. Модуль сохраните (File/ Save As) в папке с базой данных (и с разрабатываемой программой) под именем UnitDM.pas.
Теперь следует обновить связь компонента DBGrid1 с таблицей базы данных, так как компонент посредник DataSource1 перекочевал на другую форму. Первое что нужно сделать – указать главной форме (модулю magazin) на существование формы DM (модуля UnitDM). Для чего кликните главную форму, далее нажмите меню Файл / Использовать модуль, в открывшемся списке укажите на UnitDM (если вы не сохраняли модуль UnitDM.pas то он не будет отображаться в списке) и нажмите OK. Далее в инспекторе объектов для компонента DBGrid1 в свойстве DataSource укажите в выпадающем списке DM.DataSource1. Впоследствии все компоненты доступа к базе данных следует размещать на форме DM, а к вновь создаваемым формам подключать модуль UnitDM. Проверьте работоспособность приложения. И в следующий раз при проектировании СУБД в Delphi сразу создавайте Модуль данных.
3. Настройка внешнего вида отображения таблицы.
Кликните дважды по компоненту TableMagazin – получите окно настройки полей таблицы Form1.TableMagazin. Кликните в нем правой клавишей мыши и в контекстном меню выберите опцию добавления всего содержимого таблицы – Add all fields. Из полученного состояния можно удалить первое поле id_kn – идентификатор книги. Это поле является счетчиком, содержимое которого формируется автоматически и для пользователя не несет полезной информации. Оставшиеся поля можно настраивать по своему усмотрению. Свойство Alignment определяет выравнивание содержимого полей, свойство DisplayWidth – отображаемую ширину столбцов, свойство DisplayLabel – надпись в титульной строке. Этого пока достаточно для первоначальной настройки.
Дальнейшие настройки можно произвести в компоненте DBGrid1. Для начала настройте через Инспектор Объектов по своему усмотрению шрифт титульной строки в свойстве TitleFont и установите приемлемый цвет в свойстве FixedColor. Далее отключите dgIndikator в свойстве Options. Существует возможность настраивать вид столбцов по отдельности. Для этого кликните дважды по компоненту DBGrid1 и получите окно настройки полей таблицы.

Кликните правой клавишей мыши по окну настройке и возникшем контекстном меню выберите опцию добавления всех полей. Затем расставьте их по своему усмотрению, передвигая левой клавишей мыши вверх-вниз. Эта расстановка никак не скажется на исходной таблице в базе данных. Для каждого поля в инспекторе объектов можно установить свой цвет, выравнивание и другие параметры. Пример оформления внешнего вида таблицы:


Опишите настройку внешнего вида отображения таблицы.


ИЗБИРАТЕЛЬНОЕ ОТОБРАЖЕНИЕ ДАННЫХ (Создание запроса)

Для управления отображениям информации из таблиц базы данных удобнее использовать компонент ADOQuery с вкладки ADO. Его свойства аналогичны компоненту ADOTable, но дополнительно существует возможность использовать язык запросов SQL. Создайте новую форму и сохраните новый модуль как Otbor.pas, разместите на новой форме DBGrid1. На форме Модуля Данных разместите компонент ADOQuery1 и переименуйте его в QueryMagazin. Также разместите компонент DataSource2 с вкладки Data Access. Компонент QueryMagazin подключите к ADOConnection1, а у компонента DataSource2 свойство DataSet установите в QueryMagazin. Для формы Form2 укажите использовать модуль UnitDM. Для сетки DBGrid1 в инспекторе объектов укажите компонент посредник DM.DataSource2. Аналогичные действия вы уже ранее. На этом приготовления закончены, осталось только указать параметры отбора информации из базы данных. Для этих целей используется свойство SQL компонента QueryMagazin. Свойство SQL представляет собой список строк, куда можно помещать инструкции SQL. Давайте попробуем создать очень простую инструкцию для отображения всей информации из таблицы магазин. Изначально список строк SQL пустой, добавьте туда строку:
SELECT * FROM магазин
На языке запросов это означает: выбрать все поля из таблицы магазин. Чтобы такой отбор был реализован активизируйте QueryMagazin – переведите свойство Active из False в True. Посмотрите на результат – не запуская приложение уже можно видеть что отбор произошел. Давайте немного усложним запрос:
SELECT * FROM магазин WHERE цена<=150
Запустите приложение покажите преподавателю.
На языке запросов это означает: выбрать все поля из таблицы магазин, такие чтобы значение поля цена было не более 150. Чтобы такой отбор был реализован активизируйте QueryMagazin. Учитывая, что к свойствам компонентов можно обращаться во время выполнения программы, то менять запрос можно динамически – по требованию пользователя. Для этого нужно организовать обращение к свойству SQL.
Давайте разберем один несложный пример.
Для начала сделаем так, чтобы форма Form2 была доступна из формы Form1. Кликните на первой форме и через меню укажите использовать модуль второй формы. Далее разместите на первой форме кнопку Button1 для вызова второй формы и в обработчик нажатия кнопки добавьте код: Form2.ShowModal. Запустите приложение и убедитесь, что на второй форме происходит отображение только тех книг, которые не дороже 150 руб.

procedure TForm1.Button1Click(Sender: TObject);
begin
with DM.QueryMagazin do
begin
Active:=False;
SQL.Clear;
SQL.Add('SELECT * FROM магазин WHERE цена<=150');
Active:=True;
end;
Form2.ShowModal;
end;

Самостоятельная работа
Разработать базу данных согласно своему варианту.
1. Дана таблица заявок. Каждая заявка содержит:
- пункт назначения;
- номер рейса;
- фамилию и инициалы пассажира;
- желаемую дату вылета.
Вывести заявки по номеру рейса.
2. Дана таблица записей, которая содержит сведения о каждом автобусе
- номер автобуса;
- фамилию и инициалы водителя;
- номер маршрута;
- признак того, где находится автобус на маршруте или в парке.
Вывести сведения об автобусах находящихся в парке.
3. Дана таблица записей, хранящая записи о владельцах автомототранспорта:
- марка,
- номер,
- дата постановки на учет,
- ФИО владельца.
Вывести записи по дате постановки на учет.
4. Информация в больничной базе данных о стационарных больных имеет следующую структуру:
- ФИО больного;
- возраст;
- дата поступления;
- адрес;
- диагноз.
Вывести данные по диагнозу.
5. Дана таблица записей служащих, состоящая из имени, фамилии, отчества служащего, даты рождения, образования, домашнего адреса, профессии.
Вывести служащих по профессии.
6. Дана таблица записей, содержащая сведения о поездах:
- номер поезда;
- станция назначения;
- время отправления.
Вывести данные по станции назначения.
7. Дана таблица записей, запись о каждой квартире содержит:
- количество комнат;
- этаж;
- площадь;
- адрес.
Вывести данные по количеству комнат.
8. Дана таблица записей, хранящая записи о владельцах автомототранспорта:
- марка,
- номер,
- дата постановки на учет,
- ФИО владельца.
Вывести данные по марке.
9. Дана таблица записей, хранящий сведения о служащих:
- фамилия и инициалы;
- должность;
- год поступления на работу;
- оклад.
Вывести записи по году поступления на работу.
10. Дана таблица, содержащая результаты измерений температуры воздуха, которые проводились ежедневно в течение января месяца:
- день месяца;
- температура утром;
- температура днем;
- температура вечером;
- температура ночью.
Вывести данные на те дни, когда температура утром меньше 25.
11. Дана таблица, содержащая сведения о заработной плате сотрудников предприятия:
- № отдела;
- ФИО;
- Сумма к получению.
Вывести сведения на сотрудника по номеру отдела.
12. Дана таблица записей, содержащая сведения об экспортируемых товарах:
- наименование товара;
- страна, импортирующая товар;
- объем поставляемой партии в штуках.
- Цена товара
Вывести страны, в которые экспортируется данный товар.
13. Дана таблица записей, содержащая сведения о багаже нескольких пассажиров:
- фамилия пассажира;
- количество вещей (целое число);
- общий вес (действительное число).

Вывести пассажиров, имеющих более двух вещей.
1. 14. Дана таблица записей, содержащая сведения об игрушках магазина: название (куклы, конструкторы, кубики и т.д.); цена в руб.; возрастные границы.
Вывести игрушки по названию магазина.
15. Дана таблица записей, содержащая сведения о книгах:
- номер УДК;
- фамилию и инициалы автора;
- название;
- год издания;
- количество экземпляров данной книги в библиотеке.
Вывести сведения о книгах по году издания.
16. Дана таблица записей, содержащая сведения об игрушках магазина:
- название (куклы, конструкторы, паззлы, кубики и т.д.);
- цена в руб.;
- возрастные границы.
Вывести записи по возрастным границам.
17. Дана таблица записей, содержащая следующие сведения:
- имя файла;
- дата создания;
- количество обращений к файлу.
Вывести данные по дате создания
18. Дана таблица записей, представляющая собой записную книжку, содержащий сведения о знакомых:
- фамилия;
- имя;
- дата рождения в формате ДД. ММ.ГГ;
Вывести данные по дате рождения.
19. Дана таблица записей, содержащая следующие сведения об участниках бальных танцев:
- фамилию, имя, отчество участника,
- город,
- фамилию тренера,
- оценку за танец.
Вывести данные по фамилии участника.
20. Дана таблица записей, содержащая сведения о рейсах Аэрофлота:
- номер рейса;
- пункт назначения;
- время вылета.
- тип самолета.
Вывести данные по пункту пребывания.
21. Дана таблица записей, содержащая сведения об ассортименте обуви в магазине:
- наименование обуви;
- количество пар;
- стоимость одной пары.
Вывести данные по размеру обуви.
22. Дана таблица записей, содержащая сведения о лекарствах:
- наименование лекарства;
- стоимость одной единицы;
- срок годности
Вывести данные по наименованию лекарства.
23. Дана таблица записей, содержащая сведения о ювелирных изделиях:
- вид изделия;
- его вес;
- стоимость.
Вывести данные по стоимости.
24. Дана таблица записей, содержащая сведения о призывниках:
- фамилию, имя, отчество призывника;
- год его рождения;
- адрес;
- заключение о пригодности к службе.
Вывести данные по году рождения.
Самостоятельная работа
Разработать 6 различных запросов, используя язык SQL к своей базе данных.

Добавить комментарий