Создание БД и настройка ECO компонент

1) Перейдем на закладку projDeanOfficeEcoSpace рабочего окна Delphi (см. Рисунок 8.6). На этой закладке настраивают особенности функционирования объектного пространства проекта. Пока что объектное пространство пусто – оно работает стандартным способом. Элементы модели доступны в других окнах в виде диаграмм UML.

Рисунок 8.6 – Окно настройки объектного пространства

2) Выберем в палитре инструментов компонент BdpConnection из категории Borland Data Provider, предназначенный для связи с СУБД, и добавим его в проект.

3) Настроим этот компонент на доступную базу данных. В качестве учебного приме­ра пропишем путь к пустой базе данных DeOffDB.gbd выбранной СУБД.

4) В свойстве ConnectionString компонента BdpConnection выберем имя соединения IBConn1.

5) Настроим автоматическую связь модели MDA с выбранной СУБД. Синхронизация содержимого пространства ЕСО с данными на внешних носителях (файлах или базах данных) выполняется компонентами, наследующими базовые характеристики клас­са PersistenceMapper. Этот класс отвечает за отображение структуры объектного про­странства в схемы представления данных, например реляционные. Добавим к проекту компонент PersistenceMapperBdp из категории Enterprise Core Objects. Он предназначен для раскладки объектного пространства в схемы баз данных, доступ к которым происходит по технологии BDP.NET. Этот компонент располагается в окне projDeanOfficeEcoSpace рядом с объектом BdpConnection1 (экземпляром компонента BdpConnection).

6) Свяжем компонент PersistenceMapperBdp через свойство Connection с объектом BdpConnection1 (см. Рисунок 8.7). Компонент PersistenceMapperBdp полностью ответствен за все аспекты автома­тического сохранения и загрузки копии объектного пространства модели в выбранную базу данных. Фактически, добавив компонент PersistenceMapperBdp к проекту, мы тем самым реализовали все основные аспекты взаимодействия приложения MDA с базой данных.

Рисунок 8.7 – Настройка связи ECO с СУБД

7) Сгенерируем схему базы данных. Компонент PersistenceMapperBdp самостоятельно создает в выбранной базе данных специальные таблицы, поля и отношения между ними. В этих таблицах хранятся объекты пространства ЕСО. В контекстном меню компонента PersistenceMapperBdp выберем пункт, обеспечивающий автоматическую настройку всех нужных свойств для конкретной СУБД. В случае использования СУБД Interbase нужный пункт имеет вид Interbase [dialect3] setup, в случае СУБД Microsoft SQL Server – SQL Server setup и так далее. В нашем случае выбираем пункт Interbase [dialect3] setup, так как используется СУБД Firebird 2.0 (см. Рисунок 8.8).

Рисунок 8.8 – Настройка свойств СУБД

8) Сгенерируем таблицы, описывающие структуру объектного пространства. Для этого нажмем кнопку Generate Schema в нижней части окна, представляющего пространство ЕСО. В текущей базе данных автоматически сформируются таблицы, содержащие поля для хранения модели проекта (см. Рисунок 8.9).

9) В ходе генерации схемы среда Delphi проверит содержимое базы данных. Если в ней имеются таблицы, не имеющие отношения к текущей модели, будет предложено их удалить. По умолчанию режим удаления лишних таблиц выключен.

10) Компонент PersistenceMapperBdp, настроенный на конкретную СУБД, надо задействовать как связующее звено между объектным пространством ЕСО и СУБД. Для этого обратимся к текущему объектному пространству проекта и щелкнем на свободном месте окна projDeanOfficeEcoSpace. В свойстве PersistenceMapper в окне Инспектора объектов Properties для объектного пространства зададим ссылку на объект PersistenceMapperBdp1 (единственный экземпляр компонента PersistenceMapperBdp). Связь объектного пространства с СУБД установлена.

Рисунок 8.9 – Автоматическая генерация схемы модели

Далее нам необходимо представить создаваемые объекты модели (экземпляры классов Кафедра и Преподаватель) в таблице. Объект следует добавлять в таблицу, удалять его и обновлять БД по нажатию кнопок Добавить, Удалить и Сохранить соответственно. Проделаем всю работу исключительно с помощью визуаль­ных средств Delphi, не прибегая к ручному программированию.

Создание интерфейса

1) Перейдем к окну Проектировщика для главной формы проекта WinForm (вкладка Design). Переименуем стандартное название главной формы. Назовем ее wfMain, а сам класс TWinForm переименуем в TMain в свойстве Name категории Design. Свойство Text (категория Appearance) отвечает за название заголовка окна, введем в него строку, например «Главная форма». Это окно станет родительским в разрабатываемом приложении, согласно требованиям создания MDI-контейнеров.

2) В свойстве IsMdiContainer (категория Window Style) главной формы выберем значение True.

3) Создадим новую форму командой File > New > Other. Выберем значок ECO Enabled Windows Form из вкладки New ECO Files (категория Delphi for .NET Projects). В окне проектировщика появится новая форма. Эта форма будет дочерней – а значит отображаться внутри главной. Так как в ней будем представлять список преподавателей выбранной кафедры, назовем созданную форму wfLecturer, а сам класс – TLecturer. Введем в свойство формы Text строку «Преподаватели».

4) Создадим главное меню на родительской форме для обращения к дочерним формам. Поместим на Главную форму компонент MainMenu. В верхней части формы появиться строка меню, в начале которой находится область ввода текста. Чтобы создать первый пункт меню, надо сделать щелчок в области ввода текста и ввести название пункта меню. Назовем пункт меню Подсистемы. В нижнюю область пункта Подсистемы введем название команды меню – Преподаватели (см. Рисунок 8.10).

Рисунок 8.10 – Настройка главного меню

5) Выберем форму wfLecturer, вкладку Code. В окне появится код формы. Перед командой implementation объявим переменную, ответственную за создание дочернего окна Преподаватели:

var

callLect: TLecturer;

6) Перейдем к Главной форме. Чтобы в Главной форме создать дочернюю, подключим к ней форму wfLecturer командой File > Use Unit. В появившемся окне Use Unit выберем форму wfLecturer (Преподаватели). На событие выбора пункта меню Преподаватели пропишем следующие операции:

callLect := TLecturer.Create(EcoSpace);

callLect.MdiParent := self;

callLect.Show;

7) Запустим приложение. Теперь по нажатию на пункт Преподаватели внутри родительского окна появляется дочернее окно Преподаватели (см. Рисунок 8.11).

Рисунок 8.11 – Создание дочернего окна внутри родительского

8) Приступим к представлению таблицы с объектами ЕСО на форме Преподаватели. Воспользуемся гото­вым компонентом DataGrid из категории палитры инструментов Data Controls. Поместим этот компонент на форму и дадим ему название dgChair (в свойстве Name). Эта таблица будет отвечать за представление экземпляров класса Кафедра (clChair). Исходно таблица должна быть пуста. В свойстве CaptionText (заголовок таблицы) введем название Кафедры.

9) Добавим еще одну таблицу dgLecturer, которая в готовом приложении будет отвечать за отображение экземпляров класса Преподаватель (clLecturer). В свойстве CaptionText введем название Преподаватели.

10) Для работы с таблицами в простом приложение потребуется пять операций: добавление и удаление данных в двух таблицах и сохранение копии ECO пространства из оперативной памяти в базу данных. Редактирование данных будет осуществляться непосредственно в полях таблиц. Добавим на форму пять кнопок – экземпляров класса Button (см. Рисунок 8.12).

Рисунок 8.12 – Добавление компонентов пользовательского интерфейса

11) Настроим автоматическое растягивание таблиц и положение кнопок при изменении размеров окна Преподаватели. Воспользуемся свойством Anchor у объектов формы. Для таблицы Кафедры зададим значения Top, Left, Right в свойстве Anchor, для таблицы Преподаватели – Top, Bottom, Left, Right, для кнопок Button1-Button4 – Top, Right, для кнопки Button5 – Bottom, Right.