- •Отчет по учебной практике по дисциплине Прикладное программирование (часть 2)
- •Создание клиентской части приложения для просмотра, редактирования данных бд. Вызов хранимых процедур
- •Создание клиентского приложения
- •Подключение базы данных
- •Создание главной формы
- •Создание формы с информацией об авторах
- •Создание формы с информацией о книгах
- •Создание формы с информацией об изданиях
- •Создание формы с информацией о поставках
- •Создание формы с информацией о поставщиках
- •Форма для выполнения процедуры
- •Создание административной страницы
- •Вкладка «Работа с визуальными компонентами»
- •Вкладка «Просмотр записей»
- •Вкладка «Связи»
- •Вкладка «Вычисляемое поле»
- •Вкладка «Сортировка»
- •Вкладка «Фильтр»
- •Вкладка «Поиск»
- •Вкладка «Запросы»
- •Вкладка «Отчеты»
- •Создание клиентского приложения для базы данных «прием цветов в магазин»
- •Разработка клиентского приложения
- •Создание контейнера для связи с базой данных
- •Главная форма
- •Форма Цветы
- •Форма Поставщики
- •Форма Поступления
- •Форма Запросы
- •Форма для отображения записей
- •Форма Связи
- •Вкладка «Отчеты»
Вкладка «Работа с визуальными компонентами»
Из редакторов полей AT1 и AT3 добавим все поля на текущую вкладку, а так же 5 кнопок и DBNavigator, у которого оставим только 4 кнопки перемещения по записям. Вид вкладки (см. рис.2.4).
Рисунок 2.13 – Вид вкладки «Работа с визуальными компонентами»
Из представленного рисунка видно назначение кнопок: «Добавить», «Редактировать», «Удалить», «Отменить», «Сохранить». Программная реализация откликов перечисленных кнопок:
Добавить (DM->AT1->Insert();)
Редактировать (DM->AT1->Edit();)
Удалить (DM->AT1->Delete();)
Отменить (DM->AT1->Cancel();)
Сохранить (if (DM->AT1->Modified) DM->AT1->Post();)
Вкладка «Просмотр записей»
На данной вкладке будет размещено 2 Memo, в одном из которых будут отображаться названия и типы кассет от начала к концу, а на втором названия кассет и цена от конца к началу.
Обработчик первого Memo :
if (!(DM->AT1->IsEmpty()))
{
DM->AT1->First();
while (!DM->AT1->Eof)
{
Memo1->Lines->Add(DM->AT1->Fields->Fields[1]->AsString+" "+DM->AT1->Fields->Fields[2]->AsString);
DM->AT1->Next();
}
}
Обработчик второго Memo :
DM->AT1->Last();
while ( !DM->AT1->Bof)
{
Memo2->Lines->Add((AnsiString)DM->AT1->FieldByName("name")->AsString
+" "+DM->AT1->FieldByName("cost")->AsString);
DM->AT1->Prior();
}
Результаты событий (см. рис. .2. 5).
Рисунок 2.14 – Результаты программирования вкладки «Просмотр записей»
Вкладка «Связи»
Для демонстрации установки связи установим 3 кнопки, одна из которых будет убирать связи между таблицами, а 2 других – их устанавливать. На рисунке (см. рис. 2.6) отображена форма, на которой установлены три кнопки. Первая из них позволяет установить программным путем связь между таблицами Касеты- Пункт_Проката, другая – связь между таблицами Клиент-Пункт_Проката, а третья- разрывает все связи и обеспечивает работу в обычном режиме.
Рисунок 2.15 – Вид вкладке после события «Связь с кассетами»
Обработчик для кнопки «Связь с клиентами» :
DM->AT3->Close();
DM->AT3->MasterSource=NULL;
DM->AT3->MasterFields="";
DM->AT3->IndexFieldNames="";
DBLookupComboBox2->DataSource=NULL;
DM->AT3->MasterSource=DM->DS2;
DM->AT3->MasterFields="id_klient";
DM->AT3->IndexFieldNames="id_klient";
DM->AT3->Open();
Обработчик для кнопки «Связь с кассетами»:
DM->AT3->Close();
DM->AT3->MasterSource=NULL;
DM->AT3->MasterFields="";
DM->AT3->IndexFieldNames="";
DBLookupComboBox1->DataSource=NULL;
DM->AT3->MasterSource=DM->DS1;
DM->AT3->MasterFields="id_kasset";
DM->AT3->IndexFieldNames="id_kaset";
DM->AT3->Open();
Вкладка «Вычисляемое поле»
Сформируем в таблице новое поле, не предусмотренное при создании таблицы. В таблице «Кассета» объединим два поля для отражения наименования кассеты и ее цены. Как и при создании нового поля просмотра, в первую очередь необходимо получить доступ к «Редактору Полей». Выбрать пункт «New Fields». Появляется окно добавления нового поля. Чтобы создать вычисляемое поле, в котором отражается название кассеты и ее цена, в обработчике события запишем оператор:
DM->AT1->FieldByName("Прайс")->AsString=
DM->AT1->FieldByName("name")->AsString+""+
DM->AT1->FieldByName("cost")->AsString+"грн.";
Повторим процесс создания вычисляемого поля. Вновь вызываем редак-тор полей и создаем новое поле под названием «Сумма». Тип поля для этого поля будет Float. Код вычисления значения вычисляемого поля приведен ниже:
DM->AT3->Fields->Fields[9]->Value=
DM->AT3->Fields->Fields[8]->Value*DM->AT3->Fields->Fields[7]->Value;
Рисунок 2.16 – Результаты вычисляемых полей
