- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Включение выражений в отчет
Для этого используем компонент QRExpr. Выражения формируются с помощью специального редактора, который вызывается в поле свойств Expression по кнопке с многоточиями. Выражение редактируется в поле Enter Expression данного редактора и может состоять из имен полей, переменных, числовых значений, функций преобразования, арифметических и логических операций, операторов сравнения.
Рассмотрим пример составления выражения на основе данных таблицы shop.db:
-
Tovar- наименование товара,
-
Price – стоимость товара в долларах.
Требуется вывести стоимость товара в рублях по курсу 30 рублей за 1 доллар. Для этого проделаем те же операции по формированию отчета, что и в примере №1, только для поля Price добавим еще компоненту QRExpr. В свойстве Expression перейдем в редактор выражений и внесем формулу преобразования числового выражения в строковое STR(Table1.Price*30) и добавим строку 'руб.'. Получится следующее выражение:
STR(Table1.Price*30)+'руб.'
Таким образом, стоимость товара будет и в долларах и в рублях.
-
Отображение системной информации
Для этого в заголовке или в подвале страницы отчета размещается компонента QRSysData. Вид информации определяется значением свойства Data, например:
-
qrsColumnNo – номер текущей колонки отчета
-
qrsDate – текущая дата
-
qrsDataTime – текущая дата и время
-
qrsTime – текущее время
-
qrsDetailCount – количество записей в наборе данных Table
-
qrsDetailNo – номер текущей записи в наборе данных
-
qrsPageNumber – номер текущей страницы отчета
-
qrsPageCount – общее количество страниц отчета
-
qrsReportTitle – заголовок отчета
Для приведенных выше примеров самостоятельно задайте вывод системной информации.
-
Группировка данных в отчете
Для этого используется компонент QRGroup. Для задания условия группировки изменяют свойство Expression, задав имя поля набора данных, на основе которого будет осуществляться группирование записей. Для каждой группы выводится ее заголовок QRGroup (со ссылкой на компонент подвала группы в свойстве FooterBand) и подвал группы QRBand (со значение rbGroupFooter свойства BandType). Группировка будет осуществляться только на основе текущего индекса.
Создадим отчет на Form1 для таблицы firma.db, отражающий группировку записей по отделам с подсчетом общей зарплаты сотрудников отдела:
-
Tab_Nom – табельный номер
-
Name – Имя сотрудника
-
Otdel – отдел
-
Position – должность
-
Salary – оклад
-
Поместим компоненту Table1 и свойствам IndexFieldNames или IndexName установим соответствующие значения, которые определяют индексирование по полю Otdel.
-
Помещаем компонент QuickRep1 и его свойству DataSet задаем значение Table1.
-
Устанавливаем в отчет следующие компоненты:
-
QRBand1 - полоса заголовка отчета со значением rbTitle для свойства BandType.
-
QRBand2 - полоса заголовков колонок отчета со значением rbColumnHeader для свойства BandType.
-
QRGroup1 – полоса группы
-
QRBand3 - полоса детальной информации со значением rbDetail для свойства BandType
-
QRBand4 - полоса подвала группы со значением rbGroupFooter для свойства BandType
-
QRBand5 - полоса подвала отчета со значением rbSummary для свойства BandType
-
QRBand6 - полоса подвала страницы со значением rbPageFooter для свойства BandType
-
На QRBand1 размещаем компонент QRLabel для заголовка отчета.
-
На QRBand2 размещаем компоненты QRLabel для заголовков столбцов отчета.
-
Для QRGroup1 изменяем свойство FooterBand на значение QRBand4, а свойству Expression присваиваем значение Table1.Otdel.
-
В полосе детальной информации QRBand3 размещаем компоненты QRDBText, которые ссылаются на соответствующие поля Tab_Nom, Name, Position, Salary.
-
В подвал группы QRBand4 добавляем компонент QRExpr и его свойство Expression меняем на выражение SUM(Table1.Salary).
-
В подвал отчета QRBand5 добавляем компонент QRExpr и его свойство Expression меняем на выражение COUNT.
-
На полосе подвала страницы QRBand6 размещаем две компоненты QRSysData. Для одного из них изменить свойство Data на qrsDate, а для другого – qrsPageNumber.
-
Предварительный просмотр отчета покажет список сотрудников и их зарплаты, для каждого отдела – общую сумму по зарплате, в конце каждой страницы выведет текущую дату и номер страницы, в конце отчета – общее количество сотрудников.
Рассмотрим другой пример на основе SQL-запросов для нескольких баз данных, содержащих информацию об абонентах телефонной сети:
abonents.db:
ID- код абонента,
Abonent- фамилия абонента,
ID_Street- номер улицы,
House- номер дома,
Room- номер квартиры
streets.db:
ID-номер улицы,
Street-название улицы
oplata.db:
ID – код регистрации,
ID_Abonent - код абонента,
Data- дата оплаты,
Pay-абонентская плата,
Opl- оплачено.
Получим отчет о платежах абонентов сети, которые проживают по каждой улице. При этом, во-первых, сгруппируем абонентов по каждой улице и, во-вторых, сгруппируем платежи по каждому из абонентов. В каждой группе будем выводить итоговую сумму платежей.
-
Для этого поместим компоненту Query1 и внесем в свойство SQL следующий текст запроса:
SELECT S.Street, A.Abonent, A.ID, P.Data, P.Pay, p.Opl
FROM oplata.db P RIGHT JOIN abonents.db A ON A.ID=P.ID_Abonent LEFT JOIN streets.db S ON S.ID=A.ID_Street ORDER BY S.Street, A.Abonent, P.Data
-
Поместим на форму компоненту QuickRep1 и установим свойство DataSet в Query1, а в свойстве Bands установим флаги HasDetail, HasSummary, HasTitle. После этого на поверхности отчета появятся компоненты QRBand с соответствующими свойствами BandType. Оформим заголовок отчета с помощью компоненты QRMemo и для итогов введем необходимые надписи с помощью компонент QRLabel.
-
Для создания группы элементов поместим в отчет компонент QRGroup1 и зададим свойству Master имя отчета QuickRep1, в котором нужно произвести группировку данных (на форме появится область Group Header). В свойстве Expression укажем ключевое поле для группировки - название улицы Query1.Street. Для вывода названий улиц используем компоненты QRLabel и QRDBText. Для завершения группы используем компонент QRBand со свойством BandType – rbGroupFooter и FooterBand – QRGroup1.
-
С помощью компоненты QRExpr введем формулу для подсчета суммы платежей по группе, например: SUM(Query1.Pay).
Для задания формата вывода при печати используем свойство Mask: ###, ###0.00 ’р.’
Если свойство ResetAfterPrint установлено в False, то подсчет будет идти с нарастающим итогом. Для правильного подсчета суммы по группе его нужно установить в True.
Точно так же организуем подсчет общей суммы платежей по всему документу.
-
Далее внутри группы с улицами образуем группу с абонентами сети, формируем итоги группы и заголовки.
-
Заполним содержимое раздела Detail, используя компоненты QRDBText c данными из Query1: Data, Pay, Opl. Используя компоненту QRChildBand для разделения групп компонентов, установим свойство HasChild для компонент QRBand1, QRBand2 на значение True.
-
В заключение работы можно с помощью свойства Frame создать рамки для тех групп компонентов, которые требуется выделить.
-
При предварительном просмотре получится следующий вид: