Составной отчет объединяет в себе несколько простых отчетов, которые следуют при печати один за другим.
Для создания композитного отчета используется компонент QRCompositeReport . Объединение отчетов осуществляется в его обработчике события OnAddReport путем добавления названий соответствующих отчетов в список свойства Report данного компонента. Например,
Здесь композитный отчет составляется из двух отчетов: QuickRep1, который заранее определен в форме Form1, и QuickRep2, определенный в форме Form2.
Предварительный просмотр и печать составного отчета производятся с помощью метода Preview:
QRCompositeReport1.Preview;
При разработке приложений для работы с базами данных, принято разделять логику работы и пользовательский интерфейс. Эту задачу решают модули данных – компоненты контейнеры типа TDataModule. Это невидимые формы, на которых можно размещать невизуальные компоненты: наборы данных, источники данных, провайдеры и другие элементы, осуществляющие связь с базами данных.
С точки зрения программирования модули данных во всех версиях Delphi одинаковы, но работа во время проектирования различается.
В Delphi5 для вызова проектировщика модуля данных нужно выполнить команду FileÞNew и в окне Депозитария на странице New выбрать пиктограмму Data Module.
Окно DataModuleсодержит в левой панели дерево помещенных в модуль компонентов наборов и источников данных, их полей, ограничений и т.д. В правой панели содержатся две страницы: Components – компоненты, Data Diagram – диаграмма данных. Новые компоненты в модуль переносятся двойным щелчком по пиктограмме компонента на палитре компонентов.
В дереве или на странице Components можно получить доступ к любому компоненту или его полю. Например, вызвать Редактор полей набора данных Tovar можно из контекстного меню компонента Table на странице Components, либо из контекстного меню компонента на дереве компонентов. Здесь же в Редакторе Полей можно добавить все поля, создать новое поле, например, вычисляемое.
Информационные связи между компонентами можно изменить «перетаскиванием» в дереве вершины. Например, вершину компонента DataSourse можно перетащить на вершину набора данных и они автоматически свяжутся, например с Table, и в их свойства DataSet занесутся соответствующие значения.
На странице Data Diagram (диаграмма данных) можно изобразить или спроектировать взаимоотношения между наборами данных, полями, ограничениями и т.п.
Если между компонентами через свойства уже установлены связи, например, связи вида главная-вспомогательная (Master-detail), то при перемещении соответствующих вершин из панели дерева в правую панель Data Diagram, то связь между появившимися блоками отображается автоматически. Если перетаскивать вершину при нажатой клавише Ctrl, то имеющаяся дочерняя вершина расположится горизонтально, при нажатой ShiftCtrl – то вершины расположатся друг под другом. Символ «-» в правом углу позволяет сворачивать блоки.
На диаграмме в зависимости от типа связи различаются обозначения связей:
1) контурными стрелками обозначаются связи между дочерними и родительскими блоками. Они отображаются автоматически и удалить их с диаграммы нельзя.
2) закрашенной стрелкой обозначается связь установленная через свойства компонентов. Рядом со стрелкой появляется надпись с именем свойства, посредством которого установлена связь. Связь можно разорвать через контекстное меню командой Remove Relationship.
3) сплошной линией обозначается связь главной таблицы со вспомогательной. Около связи автоматически пишутся имена полей, по которым осуществляется связь.
4) линией с изображением глаза и именем результирующего поля просмотра изображается связь наборов данных через поля просмотра. Связь можно разорвать.
Местоположение и форму любой связи можно менять с помощью мыши.
Проектировщик Модулей Данных позволяет также визуально проектировать связи в модуле данных.
Пример. Спроектировать модуль данных, содержащий два набора данных БД Pokupka: главный, связанный с таблицей Tovar.db, и вспомогательный, связанный с таблицей Pokupka.db. Связь должна осуществляться через поле Code_Tovar, которое есть в каждой таблице. Нужно создать поле просмотра в наборе данных для таблицы Pokupka, которое будет содержать значения поля Tovar из набора данных для таблицы Tovar.
Поместить в Окно Проектировщика Модулей Данных два компонента набора данных Table. Для Table свойству DatabaseName задать базу данных Pokupka. Задать TableName=Tovar, и TableName=Pokupka. Для набора Pokupka задать IndexName=Code_Tovar (для связи наборов данных друг с другом).
На панель диаграмм из дерева перетащить вершины, связанные с Tovar и Pokupka.
Нажать кнопку Master Detail , которая создает связь Главная таблица - Вспомогательная таблица. С помощью мыши протянуть связь от блока Pokupka к блоку Tovar. После отпускания мыши появится окно Field Link Designer, в котором нужно указать, что устанавливается связь по полю Code_Tovar.
Перетащить вершину dsTovar(DataSource1) на страницу Data Diagram.
Ввести в набор данных Pokupka поле просмотра Tovar. Для этого нажать кнопку Lookup и провести курсором линию от блока Pokupka к блоку Tovar. В появившемся окне New Lookup Field задать параметры для поля просмотра.
Перетащить вершину dsPokupka(DataSource2) на страницу Data Diagram.
Поочередно выбрать на дереве или на диаграмме Tovar и Pokupka и с помощью контекстного меню задать отображаемые поля, свойства этих полей, ограничения и вычисляемые поля.