- •7.1 Организация доступа к данным средствами технологии ado
- •7.2 Обзор средств доступа к базам данных
- •7.3 Краткая характеристика указанных компонентов
- •7.4 Создание простого приложения с базой данных
- •7.5 Основные свойства и методы компонента Table
- •7.6 Основные свойства и методы компонента Query1
- •7.7 Выполнение поиска по некоторому параметру
- •7.8 Использование языка запросов sql для поиска
- •7.9 Заполнение таблиц
- •7.10 Использование модуля данных
- •7.11 Создание отчетности
7.10 Использование модуля данных
При разработке приложений с большим количеством таблиц или использующих большое количество запросов, интерфейс форм может быть переполнен невизуальными компонентами, соответствующим наборам и источникам данных.
Borland Builder (Delphi) позволяют создать специальное окно Data Module (модуль данных), которое удобно для хранения компонентов доступа к базам данных.
Модуль данных – это специальный тип формы, который во время выполнения программы остается невидимым. Модуль данных позволяет централизованно управлять моделью взаимодействия компонентов, ориентированных на работу с базами данных.
Чтобы добавить модуль данных в проект, следует выполнить следующие команды: File| New| Data Module. Далее на нем расположить невизуальные компоненты, для работы с базой данных: ADOConnection, DataSource, ADOTable, ADOQuery (невизуальные компоненты из рисунка 7).
Для того чтобы форма имела связь с модулем данных, необходимо в соответствующм заголовочном файле формы включить директиву #include<DataModuleUnit>.
Обратиться к объекту, расположенному в модуле данных, можно только по составному имени <название модуля данных>-><название объекта>. Например, так.
DataModule1->ADOTable1->Open();
DataModule1->ADOQuery->SQL-> Text="Delete tovar where id_tovar='"+Edit1->Text+"'";
DataModule1->ADOQuery1->ExecSQL();
7.11 Создание отчетности
При работе с базами данных всегда возникает потребность в формировании на их основе документов с целью последующей печати.
Отчетность можно создавать в Excel, Word, а также существует множество компонентов для формирования отчетности. В лабораторной работе рассматривается генератор отчетов Quick Reports, который входит в поставку Builder.
В Builder отчеты QuickReport не устанавливаются, но это можно сделать самостоятельно. Для этого выбрать меню Project | Options и на вкладке Packages нажать кнопку Add. Найти файл dcltqr60. bpl, который должен находиться в папке Bin, где установлен Builder.
Все компоненты Quick Reports находятся на вкладке QReport палитры компонентов.
Головной компонент – TquickRep. Этот компонент - основа любого отчета. Он представляет собой холст листа будущего отчета.
Свойство Bands этого компонента (полосы) содержит несколько пунктов. В этих пунктах можно указать, что должен иметь будущий документ.
HasTitle – в этом разделе делается заголовок отчета;
HasColumnHeader – заголовки колонок. Если отчет содержит таблицу, то шапка, где будут определены названия колонок, создают в этой части документа. Если нужна будет таблицы, то этому свойству присваивается значение true;
HasDetail – если в отчете есть таблицы, то вид строк формируется в этом разделе.
HasPageFooter – в этом разделе создается нижний колонтитул.
Свойство DataSet – здесь указывается таблица, из которой отчет будет брать данные.
На вкладке QReport палитры компонентов доступен ряд компонентов, которые можно располагать в этих разделах.
QRLabel - надпись. Этот компонент просто отражает нужные данные.
QRDBText – данные. Предназначен только для отображения значения какого-либо поля из базы данных.
QRSysData – системная информация. Он похож на Tlabel, только отображает системную информацию: дату, время, номер страницы и так далее.
QRMemo – набор строк. Этот компонент похож на Tmemo и отображает Memo данные из базы данных.
Для предварительного просмотра созданного отчета используется метод QuickRep1->Preview();
Задание: вывести на печать список товаров – таблицу Tovar. В отчете должна быть дата, время печати, название документа – «Список товаров», сама таблица данных – код товара, описание товара, цена.
Поместить на форму компоненты DataSource1, ADOTable1, QuickRep1. Настроить компоненты DataSource, ADOTable.
Компонент QuickRep1
Свойство значение
DataSet ADOTable1
Открыть пункты свойства Bands. В свойстве HasTitle установить значение true. В появившуюся строку поместить компонент QRLabel со страницы Qreport и в свойстве Caption ввести «Список товаров», также поместить компонент QRSysData1 для отображения текущей даты и времени.
В свойстве HasColumnHeader установить значение true. Это означает, что в отчете будут отображаться названия полей таблицы. Вставить в появившуюся строку для полей три компонента QRLabel. В заголовках написать: Код товара, Описание товара, Цена товара.
В свойстве HasDetail установить значение true. Вставить в появившуюся строку три компонента QRDBText.
Компоненты QRDBText.
Свойство значение
DataSet ADOTable1
DataField указать соответствующие поля.
Компонент QRSysData1
Свойство значение
Data qrsDateTime
Поместить на форму кнопку. При щелчке на этой кнопке должно открыться окно предварительного просмотра.
Все настройки проведены в инспекторе объектов. Для предварительного просмотра обработчик события следующий:
Следующий обработчик события создает отчет по поиску в таблице Tovar товар
/---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
QuickRep1->Preview();
}
Создать отчет по запросу: вывести данные по указанному названию товара, проданного на указанную дату. В отчете должны быть выведены следующие данные: название товара, цена товара, количество товара, стоимость товара, дата счета.. Заголовок отчета имеет следующий текст - Данные по наименованию [название товара], купленному [дата счета]
Поместить на форму компоненты, использованные в запросе в разделе поиск, настроить их.
Поместить компонент QuickRep.
Свойство значение
DateSet ADOQuery1
Настроить пункты свойства Bands.
Поместить компоненты QRLabel в строку заголовка отчета. Учесть что название товара и дата – изменяемые параметры, которые определяются в Edit1 и Edit2.
В строке HasColumnHeader отобразить названия полей.
В строке HasDetail поместить компоненты QRDBText.
Свойство значение
DateSet ADOQuery1
В отличие от предыдущего примера значение свойства DataField не определено. Объясните, почему. Можно ли определить эти значения в инспекторе объектов?
Значение этого свойства определяется программно:
QRDBText1->DataField="+имя поля+";
Обработчик события для создания отчета для указанного запроса имеет вид.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
QRLabel2->Caption=Edit1->Text;
QRLabel4->Caption=Edit2->Text;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text="Select tovar.title_tovar, tovar.price_tovar, orders.qty_order, orders.date_order,orders.stoim_tovar from tovar,orders where tovar.title_tovar='"+Edit1->Text+"' and orders.date_order='"+Edit2->Text+"' and orders.id_tovar=tovar.id_tovar";
ADOQuery1->Open();
QRDBText1->DataField="price_tovar";
QRDBText2->DataField="qty_order";
QRDBText3->DataField="stoim_tovar";
QuickRep1->Preview();
}
Контрольные вопросы
На что ориентирована технология ADO?
Назвать компонент для обеспечения связи между приложением и базой данных.
Как установить параметры соединения?
Назвать компоненты для отображения данных.
Объяснить предназначение компонента Datasource.
Перечислить основные свойства и методы компонента ADOTable.
Перечислить основные свойства и методы компонента ADOQuery.
Указать свойства компонента ADOTable, которые используются при фильтрации данных.
На что указывает свойство RecordCount и свойством каких компонентов оно может быть?
В каких случаях используется метод ExecSQL()?
В каких случаях используется метод Open()?
Указать, с помощью какого метода можно получить список имен полей таблицы, связанной с ADOQuery.
Объяснить использование модуля данных.
Как обратиться к объекту, расположенному в модуле данных?
Перечислить основные пункты и объяснить назначение компонента Bands.
На что указывает компонент QRSysData?
Указать метод, используемый для предварительного просмотра созданного отчета.
