
- •Лабораторная работа № 3
- •Теоретические сведения
- •Порядок выполнения
- •Часть 1 – Создание соединения с сервером бд, размещение компонентов доступа к данным (набора данных), компонентов источников данных
- •Часть 2 – Создание формы приложения бд, размещение и настройка компонентов управления данными
- •Часть 3 – Создание статических столбцов в компоненте dbGrid, подстановочных полей в подчиненной таблице, полей с фиксированным списком данных
- •Часть 4 – Организация поиска, упорядочивание данных в таблицах
- •Часть 5 – Создание расчетных полей в сетках, связанных с наборами данных
- •Отчет должен содержать:
Часть 2 – Создание формы приложения бд, размещение и настройка компонентов управления данными
П
одключить в форму модуль данных: #include "имя заголовочного файла"
ЗАМЕЧАНИЕ:
для перехода
между файлами проекта использовать
кнопки панели инструментов Стандартная
или соответствующие
пункты меню View.
Переименовать главную форму клиентского приложения (свойство Caption), задав ей соответствующее имя, например – Страховая компания.
Расположить на форме компонент MainMenu (вкладка Standart на палитре компонентов) для создания меню формы.
Задать пункты верхнего меню и подпункты. Справочниками будут выступать родительские таблицы (Рис. 6).
Рис. 6. Пункты верхнего меню
Расположить на форме компонент Image (вкладка Additional), указать имя файла рисунка (свойство Picture), предварительно рисунок скопировать в папку с проектом, задать ему выравнивание (свойство Align установить в alClient), растяжение (свойство Strech установить в true).
Расположить на форме компонент PageControl (вкладка Win32) для создания вкладок, которые будут содержать данные таблиц БД. Задать объекту выравнивание по полному размеру формы (свойство Align установить в alClient).
Создать вкладки по количеству таблиц, задать вкладкам имена (свойство Caption), соответствующие таблицам БД: например – Виды страхования, Филиалы и Договоры.
ЗАМЕЧАНИЕ: для создания вкладок достаточно вызвать контекстное меню (рис. 7).
Рис. 7. Пример создания вкладок
Задать жесткое разграничение рабочего поля на каждой вкладке главного окна формы, используя компоненты Panel (вкладка Standart) и Splitter (вкладка Additional).
ЗАМЕЧАНИЕ: рекомендуется выполнить следующие действия.
активизировать любую из вкладок (объекты TabSheet1-3);
добавить компонент Panel;
задать выравнивание вверху вкладки (свойство Align установить в alTop);
изменить вручную или с помощью свойств его высоту – высота объекта порядка 2/3 от высоты вкладки (Рис. 8 слева);
выбрать компонент Splitter и щелкнуть на вкладке ниже панели – объект разместится вертикально (Рис. 8 справа);
Рис. 8. Создание фиксированных областей на вкладке – этап 1
задать объекту Splitter1 выравнивание вверху свободной области на вкладке (свойство Align установить в alTop), толщину 1-2 (свойство Height) (Рис. 9 слева);
расположить ниже объекта Splitter1 еще один компонент Panel и задать ему выравнивание по размеру свободной области на вкладке (свойство Align установить в alClient) (рис. 9 справа);
Рис. 9. Создание фиксированных областей на вкладке – этап 2
выполнить аналогичные действия для остальных вкладок.
Для вывода содержимого таблиц БД расположить вверху (верхняя панель) на каждой вкладке компонент DBGrid (вкладка DataControls) и задать его выравнивание вверху панели (свойство Align установить в alTop), увеличить высоту объекта (3/4 высоты панели) (Рис. 10 слева).
ЗАМЕЧАНИЕ:
Визуальные компоненты для работы с данными расположены на странице DataControls Палитры компонентов и предназначены для построения интерфейсной части приложения. Они используются для навигации по набору данных, а также для отображения и редактирования записей. Свойство DataSource задает имя источника данных, который подключен к одному из наборов данных приложения.
Для отображения записей редактируемого набора данных и навигации по нему используются объекты DBGrid и DBNavigator соответственно. Для установления связи названных компонентов с компонентами SimpleDataSet используется компоненты DataSource. Для компонентов DataSource их свойствам DataSet устанавливается значение нужного SimpleDataSet1. Соответственно для каждого из компонентов DBGrid1 и DBNavigator1 их свойству задается значение соответствующего DataSource.
Добавить на каждую вкладку компонент DBNavigator (вкладка DataControls) и расположить его на верхней панели каждой вкладки под объектом DBGrid (Рис. 10 слева).
ЗАМЕЧАНИЕ: Навигатор используется для управления набором данных и обеспечивает соответствующий интерфейс пользователя.
Рис. 10.
Настроить каждый объект DBGrid на отображение данных из соответствующих таблиц, выбрав нужное в свойстве DataSource (Рис. 10 справа).
Настроить каждый объект DBNavigator на соответствующий объект DBGrid, выбрав нужное в свойстве DataSource (Рис. 10 справа).
Запустить программу на выполнение: команда Run, пункта меню Run (кнопка
или F9).
ЗАМЕЧАНИЕ: пункты верхнего меню еще не подключены – доступа к таблицам нет, на форме расположен фоновый рисунок. Закрыть окно приложения.
Прописать обработчик события OnCreate при запуске клиентского приложения (т.е. создании формы) так, чтобы соединение с БД было выключено, активизирован фоновый рисунок и скрыта панель с вкладками окна приложения.
ЗАМЕЧАНИЕ: следует выполнить следующие действия
активизировать объект форму, щелкнув по заголовку или выбрав в списке
перейти на вкладку Events (события) в ObjectInspector и выбрать событие OnCreate, создать обработчик события, содержащий команды:
PageControl1->Visible=false;
Image1->Visible=true;
На модуле данных также закрыть соединение с сервером базы данных (свойство Connected компонента SQLConnection установить в false).
Задать соответствующие обработчики события OnClick при выборе пунктов и подпунктов верхнего меню.
ЗАМЕЧАНИЕ:
Для пункта меню ПОДКЛЮЧИТЬ БАЗУ.
вызвать для редактирования расположенный на форме объект MainMenu1;
выбрать пункт Подключить базу;
создать для события OnClick обработчик события, содержащий команды (ниже приведены команды):
DM->SQLConnection->Connected=true;
DM->SimpleFilials->Open();
DM->SimpleVidStrah->Open();
DM->SimpleDogovors->Open();
DM->DataSourceFilials->Enabled=true;
DM->DataSourceVidStrah->Enabled=true;
DM->DataSourceDogovors->Enabled=true;
Для пункта меню ВЫХОД.
выбрать пункт Выход;
создать для события OnClick обработчик события, содержащий команды:
DM->SQLConnection->Connected=false;
Form1->Close();
Для пункта меню активизации вкладки на форме.
выбрать пункт с названием вкладки;
учитывая, что каждая вкладка нумеруется от 0 и далее, записать команды вида:
Image1->Visible=false;
PageControl1->Visible= true;
PageControl1->ActivePageIndex=0; //указать нужный индекс вкладки
Пункт отчеты и другие в данной работе не рассматриваются.
Запустить программу на выполнение и проверить работу запрограммированных пунктов верхнего меню.
Запустить приложение и внести изменения в таблицы с помощью инструментов навигационной панели
: вставки новой записи, удаления, обновления данных. Закрыть окно приложения.
Снова запустив приложение, проверить сохранность внесенных изменений в таблице.
ЗАМЕЧАНИЕ: изменения не будут сохранены, т.к. не были прописаны обработчики событий обновления, внесения и удаления записей в таблицах для объектов типа Навигатор.
Задать соответствующие обработчики события обновления, внесения и удаления записей в таблицах БД для объектов типа SimpleDataSet.
ЗАМЕЧАНИЕ:
Пересылка данных между сервером и компонентом SimpleDataSet осуществляется с помощью пакетов. Размер пакетов (по числу записей) можно задать с помощью свойства PacketRecords типа int. По умолчанию устанавливается значение -1, которое означает, что один пакет должен содержать все записи набора данных. Если значение данного свойства равно 0, то в пакете передаются только метаданные.
Фиксация
внесенных при редактировании изменений
и отправка данных на сервер осуществляется
в обработчике события AfterPost,
возникающего при нажатии кнопки
Post (утвердить
результат изменения записи) компонента
DBNavigator
и при переходе в компоненте DBGrid
на другую строку.
После модификации набора данных возможна ситуация, когда изменения сделаны, но не отображены визуальными компонентами, связанными с этим набором. В таких случаях нужно вызывать метод Refresh, который повторно считывает набор данных и тем самым гарантирует, что визуальные компоненты будут отображать текущие, а не устаревшие данные. При работе в многопользовательской системе рекомендуется периодически вызывать метод Refresh, чтобы своевременно учитывались изменения, сделанные другими пользователями.
С учетом выше сказанного для главных таблиц БД следует для события AfterPost объектов SimpleDataSet создать процедуру обработчика события по щелчку мыши следующего вида:
void __fastcall TDM::SimpleFilialsAfterPost(TDataSet *DataSet)
{
SimpleFilials->ApplyUpdates(-1);
SimpleDogovors->Refresh(); //обновление старых данных в
//подчиненной таблице Dogovors
//для поддержки целостности данных
}
void __fastcall TDM::SimpleVidstrahAfterPost(TDataSet *DataSet)
{
SimpleVidstrah->ApplyUpdates(-1);
SimpleDogovors->Refresh(); //обновление старых данных в
//подчиненной таблице Dogovors
//для поддержки целостности данных
}
Для подчиненной таблицы достаточно одной команды в процедуре для соответствующего события AfterPost:
SimpleDogovors->->ApplyUpdates(-1);
Аналогично, прописать команды процедур обработчиков событий AfterDelete для компонентов SimpleDataSet для того, чтобы выполнялось удаление данных в таблицах
Запустить приложение и внести изменения в таблицы с помощью инструментов навигационной панели : вставки новой записи, удаления, обновления данных. Закрыть окно приложения.
Снова запустив приложение, проверить сохранность внесенных изменений в таблице.
ЗАМЕЧАНИЕ: изменения должны быть сохранены. В противном случае проверьте созданные обработчики событий, обновления, внесения и удаления записей в таблицах для объектов типа Навигатор (см. п. 34).