Лабораторная работа №7-9 Тема




Скачать 165.87 Kb.
НазваниеЛабораторная работа №7-9 Тема
Дата публикации14.04.2014
Размер165.87 Kb.
ТипЛабораторная работа
litcey.ru > Литература > Лабораторная работа
Лабораторная работа № 7-9

Тема: Создание в программе CodeGear RAD Studio (C++Builder) клиентского приложения по технологии dbExpress для клиент-серверной СУБД MySQL.

Цель: Получить практические навыки работы c базами данных в среде для быстрой разработки приложений на C++.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
См. Электронный учебник А. Хомоненко, С. Ададурова «Работа с базами данных в C++Builder» (файл DataBase v C++Builder.djvu в папке с заданием на лабораторную работу) стр. 263-286.
Технология dbExpress. В основе технологии dbExpress лежит использование множества драйверов, компонентов, объединяющих соединения, транзакций, запросов и наборов данных, а так же интерфейсов, реализующих универсальный доступ к соответствующим функциям.

При ее использовании для доступа к данным используются SQL-запросы. Обладая легкой переносимостью, приложения нормально работают под управлением как Windows так и Linux. Для использования этой технологии достаточно подключить к приложению динамически подключаемою библиотеку с драйвером, взаимодействующим с клиентским программным обеспечением для нужного сервера базы данных, в частности, для MySQL (рис. _1). Библиотека libmysql.dll должна находиться либо в папке WINDOWS\System32, либо в папке с клиентским приложением.



Рис. _1. Схема доступа к данным с помощью dbExpress

По сравнению с использованием механизма BDE технология dbExpress обеспечивает построение более легковесных (по объему кода) приложений для работы с базами данных. К недостаткам технологии dbExpress можно отнести то, что она не поддерживает концепцию открытых таблиц и не содержит встроенную поддержку обновления данных, кроме способности выполнения запросов INSERT, DELETE и UPDATE.
^ ПОРЯДОК ВЫПОЛНЕНИЯ

Часть 1 – Создание соединения с сервером БД, размещение компонентов доступа к данным (набора данных), компонентов источников данных

  1. Запустить сервер MySQL 5.0.

  2. Проверить наличие личной базы данных по варианту в папке data на сервере.

  3. Подключиться к серверу базы данных и просмотреть наличие пользователей и их доступов к личной базе данных студента.

  4. Проверить наличие библиотеки libmysql.dll в папке WINDOWS\System32 (при необходимости скопировать из папки MYSQL\BIN на сервере).

  5. Запустить программную среду CodeGear RAD Studio (C++Builder).

  6. Создать новый проект VCL Form Application – C++Builder.

  7. Вывести для удобства работы на экран Object Inspector и Tool Palett (пункт меню View).

  8. Добавить в проект модуль данных (File New Other… или New Items).



Рис. 1. Окно добавления в проект модуля данных

  1. Расположить на модуле данных с Палитры компонентов dbExpress и DataAccess необходимые компоненты: для установки соединения с сервером (компонент SQLConnection), для доступа к данным (набор данных) (компонент SimpleDataSet), источники данных (компонент DataSourse) и переименовать их согласно с названиями таблиц личной базы данных студента (свойство name в Object Inspector). Для варианта 30 (рис. 2).

ЗАМЕЧАНИЕ: Набор данных представляет собой совокупность записей, взятых из одной или нескольких таблиц БД. Компонент SimpleDataSet предназначен для редактирования набора данных (получения данных, их кэширования и отправления измененных данных на сервер). Компонент использует двунаправленный курсор и позволяет редактировать данные в режиме редактирования, исправляя основные недостатки технологии dbExpress.

И
сточник данных (компонент DataSourse) используется как промежуточное звено между набором данных и визуальными компонентами, с помощью которых пользователь управляет этим набором данных. Для указания набора данных, с которым связан источник данных, служит свойство DataSet последнего. Визуальные компоненты связаны с источником данных через свои свойства DataSourse.

Рис. 2. Пример для варианта 30 – БД Страхование

  1. Задать параметры подключения к серверу баз данных, выбрав предварительно следующие свойства компонента SQLConnection: выбрать драйвер СУБД, ввести имя базы данных согласно варианта, имя сервера (например, указать локальный сервер), имя пользователя и пароль, отображение букв русского алфавита (рис. 3).

ЗАМЕЧАНИЕ:

Для версии программы 2007 для задания настроек следует выбрать свойство Params и в появившемся окне ввести нужные данные. Строку с заданием отображения русских букв следует добавить самостоятельно.



Рис. 3. Настройки компонента SQLConnection для варианта 30

  1. Подключиться к серверу баз данных, установив свойство Connected в truе.

ЗАМЕЧАНИЕ: если появляется сообщение об ошибке нахождения библиотеки libmysql.dll, то, возможно, не скопирован файл libmysql.dll из папки с сервером в папку C:\WINDOWS\SYSTEM32. Возможно, версия библиотеки не соответствует версии среды программирования – необходимо подобрать файл библиотеки. Также может быть не запущен сервер, или не создан указанный пользователь.

  1. Компонентам SimpleDataSet выбрать в свойстве Connection созданное соединение. Включить активность компонентов SimpleDataSet (свойство Active).

  2. Выбрать для компонентов SimpleDataSet типы команд и в зависимости от выбранного типа (таблица, запрос или хранимая процедура) в свойстве CommandText выбрать нужную таблицу, хранимую процедуру или создать запрос на вывод записей из соответствующих таблиц, воспользовавшись диалоговым окном.

ЗАМЕЧАНИЕ: Если в свойстве CommandText не отображаются имена существующих таблиц или хранимых процедур, или не отображаются имена таблиц для формирования запроса, то следует проверить предыдущие настройки.



Рис. 4. Формирование запроса для таблицы ^ Filials

  1. Компоненты DataSource связать с компонентами SimpleDataSet, выбрав соответствующие значения в свойстве DataSet, а также включить активность (Рис. 5).



Рис. 5. Настройка компонента для варианта 30 на таблицу Filials

  1. Переименовать модуль данных, например, задав имя DM (свойство name в ObjectInspector).


Часть 2 – Создание формы приложения БД, размещение и настройка компонентов управления данными


  1. Подключить в форму модуль данных: #include "имя заголовочного файла"

ЗАМЕЧАНИЕ: для перехода между файлами проекта использовать кнопки панели инструментов Стандартная или соответствующие пункты меню View.


  1. Переименовать главную форму клиентского приложения (свойство Caption), задав ей соответствующее имя, например, для варианта 30 – Страховая компания.

  2. Расположить на форме компонент MainMenu (вкладка Standart на палитре компонентов) для создания меню формы.

  3. Задать пункты верхнего меню и подпункты. Справочниками будут выступать родительские таблицы (Рис. 6).



Рис. 6. Пункты верхнего меню для варианта 30

  1. Расположить на форме компонент ^ Image (вкладка Additional), указать имя файла рисунка (свойство Picture), предварительно рисунок скопировать в папку с проектом, задать ему выравнивание (свойство Align установить в alClient), растяжение (свойство Strech установить в true).

  2. Расположить на форме компонент PageControl (вкладка Win32) для создания вкладок, которые будут содержать данные таблиц БД. Задать объекту выравнивание по полному размеру формы (свойство Align установить в alClient).

  3. Создать вкладки по количеству таблиц, задать вкладкам имена (свойство Caption), соответствующие таблицам БД: например, для варианта 30 – Виды страхования, Филиалы и Договоры.

ЗАМЕЧАНИЕ: для создания вкладок достаточно вызвать контекстное меню (рис. 7).



Рис. 7. Пример создания вкладок для В30

  1. Задать жесткое разграничение рабочего поля на каждой вкладке главного окна формы, используя компоненты Panel (вкладка Standart) и Splitter (вкладка Additional).

ЗАМЕЧАНИЕ: рекомендуется выполнить следующие действия.

  1. активизировать любую из вкладок (объекты TabSheet1-3);

  2. добавить компонент Panel;

  3. задать выравнивание вверху вкладки (свойство Align установить в alTop);

  4. изменить вручную или с помощью свойств его высоту – высота объекта порядка 2/3 от высоты вкладки (Рис. 8 слева);

  5. выбрать компонент Splitter и щелкнуть на вкладке ниже панели – объект разместится вертикально (Рис. 8 справа);



Рис. 8. Создание фиксированных областей на вкладке – этап 1

  1. задать объекту Splitter1 выравнивание вверху свободной области на вкладке (свойство Align установить в alTop), толщину 1-2 (свойство Height) (Рис. 9 слева);

  2. расположить ниже объекта Splitter1 еще один компонент Panel и задать ему выравнивание по размеру свободной области на вкладке (свойство Align установить в alClient) (рис. 9 справа);



Рис. 9. Создание фиксированных областей на вкладке – этап 2

  1. выполнить аналогичные действия для остальных вкладок.




  1. Для вывода содержимого таблиц БД расположить вверху (верхняя панель) на каждой вкладке компонент ^ DBGrid (вкладка DataControls) и задать его выравнивание вверху панели (свойство Align установить в alTop), увеличить высоту объекта (3/4 высоты панели) (Рис. 10 слева).

ЗАМЕЧАНИЕ:

Визуальные компоненты для работы с данными расположены на странице DataControls Палитры компонентов и предназначены для построения интерфейсной части приложения. Они используются для навигации по набору данных, а также для отображения и редактирования записей. Свойство DataSource задает имя источника данных, который подключен к одному из наборов данных приложения.

Для отображения записей редактируемого набора данных и навигации по нему используются объекты DBGrid и DBNavigator соответственно. Для установления связи названных компонентов с компонентами SimpleDataSet используется компоненты DataSource. Для компонентов DataSource их свойствам DataSet устанавливается значение нужного SimpleDataSet1. Соответственно для каждого из компонентов DBGrid1 и DBNavigator1 их свойству задается значение соответствующего DataSource.


  1. Добавить на каждую вкладку компонент DBNavigator (вкладка DataControls) и расположить его на верхней панели каждой вкладки под объектом DBGrid (Рис. 10 слева).

ЗАМЕЧАНИЕ: Навигатор используется для управления набором данных и обеспечивает соответствующий интерфейс пользователя.



Рис. 10.

  1. Настроить каждый объект DBGrid на отображение данных из соответствующих таблиц, выбрав нужное в свойстве DataSource (Рис. 10 справа).

  2. Настроить каждый объект DBNavigator на соответствующий объект DBGrid, выбрав нужное в свойстве DataSource (Рис. 10 справа).

  3. Запустить программу на выполнение: команда Run, пункта меню Run (кнопка или F9).

ЗАМЕЧАНИЕ: пункты верхнего меню еще не подключены – доступа к таблицам нет, на форме расположен фоновый рисунок. Закрыть окно приложения.

  1. Прописать обработчик события OnCreate при запуске клиентского приложения (т.е. создании формы) так, чтобы соединение с БД было выключено, активизирован фоновый рисунок и скрыта панель с вкладками окна приложения.

ЗАМЕЧАНИЕ: следует выполнить следующие действия

  1. активизировать объект форму, щелкнув по заголовку или выбрав в списке

  2. перейти на вкладку Events (события) в ObjectInspector и выбрать событие OnCreate, создать обработчик события, содержащий команды:

PageControl1->Visible=false;

Image1->Visible=true;

  1. На модуле данных также закрыть соединение с сервером базы данных (свойство Connected компонента SQLConnection установить в false).




  1. Задать соответствующие обработчики события OnClick при выборе пунктов и подпунктов верхнего меню.

ЗАМЕЧАНИЕ:

Для пункта меню ПОДКЛЮЧИТЬ БАЗУ.

  1. вызвать для редактирования расположенный на форме объект MainMenu1;

  2. выбрать пункт Подключить базу;

  3. создать для события OnClick обработчик события, содержащий команды (ниже приведены команды для варианта 30):

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;

Для пункта меню ВЫХОД.

  1. выбрать пункт Выход;

  2. создать для события OnClick обработчик события, содержащий команды:

DM->SQLConnection->Connected=false;

Form1->Close();

Для пункта меню активизации вкладки на форме.

  1. выбрать пункт с названием вкладки;

  2. учитывая, что каждая вкладка нумеруется от 0 и далее, записать команды вида:

Image1->Visible=false;

PageControl1->Visible= true;

PageControl1->ActivePageIndex=0; //указать нужный индекс вкладки

Пункт отчеты и другие в данной работе не рассматриваются.

  1. Запустить программу на выполнение и проверить работу запрограммированных пунктов верхнего меню.

  2. Запустить приложение и внести изменения в таблицы с помощью инструментов навигационной панели : вставки новой записи, удаления, обновления данных. Закрыть окно приложения.

  3. Снова запустив приложение, проверить сохранность внесенных изменений в таблице.

ЗАМЕЧАНИЕ: изменения не будут сохранены, т.к. не были прописаны обработчики событий обновления, внесения и удаления записей в таблицах для объектов типа Навигатор.

  1. Задать соответствующие обработчики события обновления, внесения и удаления записей в таблицах БД для объектов типа SimpleDataSet.

ЗАМЕЧАНИЕ:

Пересылка данных между сервером и компонентом SimpleDataSet осуществляется с помощью пакетов. Размер пакетов (по числу записей) можно задать с помощью свойства PacketRecords типа int. По умолчанию устанавливается значение -1, которое означает, что один пакет должен содержать все записи набора данных. Если значение данного свойства равно 0, то в пакете передаются только метаданные.

Фиксация внесенных при редактировании изменений и отправка данных на сервер осуществляется в обработчике события AfterPost, возникающего при нажатии кнопки ^ Post (утвердить результат изменения записи) компонента DBNavigator и при переходе в компоненте DBGrid на другую строку.

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

С учетом выше сказанного для главных таблиц БД следует для события AfterPost объектов SimpleDataSet создать процедуру обработчика события по щелчку мыши следующего вида (для варианта 30):

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, например, для В30:

SimpleDogovors->->ApplyUpdates(-1);
Аналогично, прописать команды процедур обработчиков событий AfterDelete для компонентов SimpleDataSet для того, чтобы выполнялось удаление данных в таблицах


  1. Запустить приложение и внести изменения в таблицы с помощью инструментов навигационной панели : вставки новой записи, удаления, обновления данных. Закрыть окно приложения.

  2. Снова запустив приложение, проверить сохранность внесенных изменений в таблице.

ЗАМЕЧАНИЕ: изменения должны быть сохранены. В противном случае проверьте созданные обработчики событий, обновления, внесения и удаления записей в таблицах для объектов типа Навигатор (см. п. 34).
^ Часть 3 – Создание статических столбцов в компоненте DBGrid, подстановочных полей в подчиненной таблице, полей с фиксированным списком данных


  1. Создать статические столбцы для полей сеток^ DBGrid на форме приложения.

ЗАМЕЧАНИ: Сетка отображает все данные, имеющиеся в наборе данных.

По умолчанию для каждого поля набора данных, связанного с компонентом DBGrid, автоматически создается отдельный столбец, и все столбцы в сетке доступны. Такие столбцы называются динамическими. Для создания статических столбцов используется специальный Редактор столбцов. Достоинствами статических столбцов является то, что для их объектов можно установить значения свойств, отличные от свойств соответствующего поля и не зависящие от него. Например, если для некоторого статического столбца установить свое имя, то оно не будет меняться даже в случае, если с этим столбцом связывается другое поле набора данных (т.е. создание подстановки для внешних полей).

Первоначально список статических столбцов пуст, т.е. все столбцы являются динамическими. Редактор столбцов позволяет: создать статический столбец, удалить, изменить порядок следования столбцов.
Для создания списка статических столбцов следует выполнить для компонента SimpleDataSet следующие действия:

  1. Выключить на модуле данных активность компонента SimpleDataSet, связанного с соответствующей таблицей (например, для В30 – компонент SimpleFilials);

  2. Щелкнуть на значке компонента два раза, вызвав Редактор столбцов;

  3. В Редакторе столбцов вызвать контекстное меню и выбрать пункт (Добавить все столбцы);



Рис. 11. Список статических столбцов для Варианта 30


  1. Выполнить аналогичные действия над каждым компонентом SimpleDataSet;




  1. Создать подстановочные статические столбцы для полей сетки DBGrid для набора данных, связанного с подчиненной таблицей для отображения в подчиненной таблице содержимого полей главных таблиц с выпадающим списком значений.

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Вызвать контекстное меню в Редакторе столбцов для компонента SimpleDataSet, связанного с подчиненной таблицей в БД (например, для В30 – SimpleDogovors) и выбрать (Добавить новое поле);

  2. Для создания подстановочного поля, содержащего выпадающий список значений поля связанной по внешнему ключу главной таблицы (например, для варианта 30 – поле NameFiliala в таблице Dogovors, содержащее значение поля FNameFiliala главной таблицы Filials, связь по ключу FKodFiliala) в появившемся окне выбрать:



Рис. 12. Создание постановочного поля NameFiliala в таблице Dogovors для В30

  1. Аналогичным образом создать подстановочное поле для другой главной таблицы для данного набора данных (например, для В30 – поле VidStrah в таблице Dogovors, содержащее значение поля VNaimenovanie главной таблицы Vidstrahovaniya, связь по ключу VKod VidStrah) (рис. 13)



Рис. 13. Создание постановочного поля VidStrah в таблице Dogovors для В30

  1. Активизировать в модуле данных все компоненты SimpleDataSet.


При желании можно создать несколько подстановочных полей для вывода данных из главных таблиц.


  1. Настроить поля сетки на отображение данных из связанных наборов данных: вывод русских названий столбцов таблиц, подстановочных столбцов.

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Дважды щелкнуть на форме на компоненте DBGrid, связанном с одним из наборов данных (или вызвать контекстное меню на компоненте, выбрать Columns Editor…);

  2. В появившемся окне выбрать Add all fields;

  3. Поочередно выбирая названия полей сетки в Object Inspector, изменять соответствующее значение в свойстве Caption в списке Title с английского на русский (рис. 14).



Рис. 14. Изменение названий полей сетки (пример для В30)

  1. Аналогичным образом изменить все имена полей всех сеток.


При желании можно удалить из списка полей сетки определенные поля, учитывая, что поле должно быть Null (не обязательным для заполнения) или внешним ключом, если создано соответствующее подстановочное поле.

Например, для варианта 30 в сетке, связанной с подчиненной таблицей Dogovors, из сетки можно удалить внешние ключи, т.к. были созданы подстановочные статические поля VidStrah и NameFilial (см. п. 34, рис. 15 слева).



Рис. 15. Список столбцов сетки подчиненной таблицы Dogovors для В30

  1. Запустить приложение на выполнение, проверить работу подстановочных столбцов в подчиненной таблице (рис. 15 справа, пример для В30).

  2. Создать для отдельных полей сетки выпадающий список с фиксированным списком данных.

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Выбрать сетку, связанную с нужным набором данных, например, для В30 – с таблицей Dogovors;

  2. Выбрать нужное поле (например, для В30 поле DTarifStavka);

  3. Выбрать свойство PinkList (свойство PinkList представляет собой список для выбора заносимых в поле значений) и ввести нужные значения (рис. 16).

В отличие от подстановочного поля, для заполненных записей не происходит автоматическое обновление при внесении изменений в существующий список.

Если необходимо ограничиться только списком, следует установить свойству ReadOnly значение True.



Рис. 16. Список значений для поля DTarifStavka таблицы Dogovors для В30
Часть 4 – Организация поиска, упорядочивание данных в таблицах

  1. Расположить в нижней части на вкладках формы компоненты для сортировки: выбор имени поля в наборе данных, направление сортировки, кнопку запуска (рис. 17).



Рис. 17. Пример области сортировки для таблицы Dogovors В30

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Расположить на нужной вкладке два компонента RadioGroup с вкладки Standart. Выбрать вкладку, связанную с нужным набором данных, например, для В30 – с таблицей Dogovors и настроить компонент на заданный набор;

  2. Задать компонентам соответствующее свойство Caption (рис. 17);

  3. Для каждого компонента в свойстве Items заполнить соответственно имена полей для сортировки и направление сортировки (рис. 17);

  4. Установить первый элемент переключателя активным, установив для свойства ItemIndex значение 0;

  5. Добавить на вкладку управляющую кнопку: компонент Button с вкладки Standart, изменить свойство Caption;

  6. Прописать соответствующий обработчик события OnClick для кнопки.


Пример для таблицы Dogovors В30:

//----------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString d;

switch (RadioGroup2->ItemIndex) { //выбор направления сортировки

case 0: d=""; break; // по возрастанию

case 1: d="DESC"; // по убыванию

}

switch (RadioGroup1->ItemIndex) { //выбор поля для сортировки

case 0: d=" order by dnomerdogov " + d; break;

case 1: d=" order by ddata " + d; break;

case 2: d=" order by DStrahSymma " + d; break;

case 3: d=" order by DTarifStavka " + d; break;

}

DM->SimpleDogovors->DataSet->CommandText="select * from dogovors "+d;

DM->SimpleDogovors->Refresh(); //обновление набора данных

}

  1. Аналогичным образом создать область сортировки на остальных вкладках.

  1. Расположить в нижней части на вкладках формы компоненты для поиска по определенным полям: выбор имени поля в наборе данных, ввод текста для поиска, кнопку запуска, кнопку сброса (рис. 18).



Рис. 18. Пример области поиска для таблицы Filials В30

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Расположить на нужной вкладке компонент ComboBox с вкладки Standart. Выбрать вкладку, связанную с нужным набором данных, например, для В30 – с таблицей Filials и настроить компонент на заданный набор;

  2. Для компонента в свойстве Items заполнить соответственно имена полей для поиска в данном наборе данных;

  3. Установить первый элемент выпадающего списка активным, задав для свойства ItemIndex значение 0 (или оставить начальное значение списка пустым, очистив свойство Text (рис. 18);

  4. Добавить на вкладку управляющие кнопки: компоненты Button с вкладки Standart, изменить свойство Caption (рис. 18);

  5. Добавить на вкладку компонент Edit с вкладки Standart, очистить свойство Text;

  6. Добавить на вкладку 2 компонента Lable с вкладки Standart, изменить свойство Caption (рис. 18);

  7. Прописать соответствующий обработчик события ^ OnClick для кнопки Поиск, учитывая, что текстом поиска может служить фрагмент (буква) значения поля.


Пример для таблицы Filials В30:
//----------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

AnsiString d1,s;

switch (ComboBox1->ItemIndex) { //выбор имени поля в списке

case 0: d1="FNameFiliala"; break;

case 1: d1="FAdres"; break;

case 2: d1="FTelefon"; break;

}

s=Edit1->Text; //присвоение переменной значения из поля Edit1

DM->SimpleFilials->DataSet->CommandText="select * from filials where "+d1+" like '%"+s+"%'";

DM->SimpleFilials->Refresh();

}


  1. Прописать соответствующий обработчик события ^ OnClick для кнопки Сброс.


Пример для таблицы Filials В30:
//----------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)

{

DM->SimpleFilials->DataSet->CommandText="select * from filials order by FKodFiliala"; //сортировка набора данных по ключевому полю

DM->SimpleFilials->Refresh(); //обновление набора данных

Edit1->Text=""; //очистка поля поиска

}

  1. Аналогичным образом создать область поиска на остальных вкладках.




  1. Запустить приложение на выполнение, проверить работу областей поиска и сортировки на вкладках.


Часть 5 – Создание расчетных полей в сетках, связанных с наборами данных

  1. Создать в подчиненной таблице расчетное поле, согласно варианта предметной области, не используя соответствующие запросы.

ЗАМЕЧАНИЕ: выполнить следующие действия:

  1. Создать расчетный статический столбец для полей сетки DBGrid для набора данных, связанного с подчиненной таблицей: вызвать контекстное меню в Редакторе столбцов для компонента SimpleDataSet, связанного с подчиненной таблицей в БД (например, для В30 – SimpleDogovors) и выбрать (Добавить новое поле);

  2. Для создания расчетного поля (например, для В30 поля StrahPlatej, содержащего вещественный тип данных) в появившемся окне ввести и выбрать:




Рис. 9. Добавление нового расчетного поля в таблицу Dogovors

  1. На форме выбрать сетку, связанную с заданным набором данных (для В30 – с таблицей Dogovors), и добавить новое поле в список полей сетки (см. п. 39). Для добавленного поля выбрать в свойстве FieldName (Имя поля) соответствующее имя расчетного поля (например, для В30 );

  2. Для соответствующего компонента SimpleDataSet на модуле данных прописать обработчик события OnCalcFields.


Пример для SimpleDogovors В30, где расчетное поле определяется как произведение полей DTarifStavka на DStrahSymma (рис. 20):

//----------------------------------------------------------------------

void __fastcall TDM::SimpleDogovorsCalcFields(TDataSet *DataSet)

{

DM->SimpleDogovorsStrahPlatej->AsFloat=DM->SimpleDogovors->

FieldByName("DTarifStavka")->AsFloat*DM->SimpleDogovors->FieldByName("DStrahSymma")->AsFloat/100;

}



Рис. 20. Фрагмент формы Договора В30 с расчетным полем

  1. Запустить приложение на выполнение.

  2. Cохранить проект: File, Save All…

  3. Закрыть проект и среду.


Отчет должен содержать:


  1. Тему, цель лабораторной работы.

  2. Порядок выполнения работы с копиями экранов.

  3. Ответы на контрольные вопросы.


КОНТРОЛЬНЫЕ ВОПРОСЫ


  1. Технология создания приложений dbExpress. Достоинства и недостатки.

  2. Компонент соединения с БД.

  3. Компоненты доступа к данным БД.

  4. Динамические и статические поля в компоненте DBGrid.

  5. Создание подстановочных и расчетных полей.

Похожие:

Лабораторная работа №7-9 Тема iconЛабораторная работа №1. Тема «Таблицы и графики в статистике»
Вывод: Лабораторная работа №1 была проведена с целью освоения темы диаграммы и графики. В ходе лабораторной я научилась строить графики...
Лабораторная работа №7-9 Тема iconЛабораторная работа №6 Тема: Двумерные массивы

Лабораторная работа №7-9 Тема iconЛабораторная работа №2 Тема : Условный оператор. Условные операции

Лабораторная работа №7-9 Тема iconЛабораторная работа №1. Тема: Линейная структура: вычисления формулы

Лабораторная работа №7-9 Тема iconЛабораторная работа №5. Создание сносок, ссылок и оглавлений
Курсор автоматически перейдет в конец страницы. Напишите текст сноски: «Моя первая лабораторная работа word»
Лабораторная работа №7-9 Тема iconЛабораторная работа №1 Тема : Постановка задачи
В. А. Куликова, студент гр. Ис-2о Проверил: Е. С. Вяткина, старший преподаватель
Лабораторная работа №7-9 Тема iconЛабораторная работа №1 Тема: Работа с виртуальными машинами
Научиться устанавливать и работать с виртуальными машинами в среде Windows xp на основе таких программ как Vksaver Workstation 4...
Лабораторная работа №7-9 Тема iconЛабораторная работа № Тема
Цель работы: определение момента инерции твердого тела на основе законов равноускоренного движения
Лабораторная работа №7-9 Тема iconЛабораторная работа 8 Тема: Работа с таблицами маршрутизации
Цель работы: Изучение таблиц маршрутизации, Создание таблиц маршрутизации на пк и на маршрутизаторе
Лабораторная работа №7-9 Тема iconЛабораторная работа номер 1 Тема: Линейная структура. Предобразования типов
Постановка задачи Вести с клавиатуры целые: а1,а2,а3 действительные: m,n величины
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
litcey.ru
Главная страница