Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Построение запроса в демонстрационной базе данных

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

Модифицируем модуль данных нашего приложения, разместив на панели Components компоненты Query1 и DataSource1. В свойстве DataSet источника данных (назовем его SourceQuery1) укажем значение Query1 (имя объекта-запроса), а в самом объекте Query1 зададим название БД (свойство DatabaseName должно получить значение ААА).

Первый запрос строится на основе трех таблиц: Naklad, Plateg и Zakazcik. Обратимся к свойству SQL компонента Query1, раскроем окно редактора текста запроса и введем следующий текст (предварительно его можно проверить с помощью утилиты SQL Explorer):

SELECT DISTINCT NNom, PZKod, ZNaim, NSumma, SUM(PSumma)

FROM Naklad, Plateg, Zakazcik

WHERE (NNom=PNNom) AND (NZKod=PZKod) AND (ZKod=PZKod)

GROUP BY NNom, PZKod, ZNaim, NSumma

Теперь остается отобразить набор нужных записей на экране. Для этого создадим новую рабочую форму командой File > New > Form. Сохраним модуль этой формы под именем fmQuery1Unit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства формы:

Caption = ‘ТТН, по которым поступили ПТР’ BorderStyle = bsDialog

Name = FQuery1 BorderWidth = 2

Height = 210 Width = 416

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose).

В оставшейся свободной части формы разместим компонент Panel2 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmQuery1Unit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourceQuery1. Для компонента DBNavigator1 в списке свойств DataSource также выберем DM.SourceQuery1.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add Fields. Добавим последовательно все поля, кроме PZKod.

Добавим новое вычисляемое поле Nedo командой New Field. Далее редактируем свойства каждого столбца в отдельности. Вид выравнивания значений в столбце зададим, обратившись к свойству Alignment, параметры заголовка зададим, раскрыв свойство Caption.

Для события OnCalcFields компонента Query1 напишем обработчик:

procedure TDM.Query1CalcFields(DataSet: TDataSet);

begin

Query1Nedo.Value:=Query1NSumma.Value

- Query1SUMOFPSumma.Value;

end;

 
 

Вид окна после всех сделанных изменений показан на рис. 41.

Рис. 41. Рабочее окно для запроса «ТТН, по которым поступили ПТР»

 

Свяжем вызов этой формы с соответствующим пунктом контекстного меню главной формы. Щелкнем правой кнопкой мыши на компоненте PopupMenu1, расположенном на этой форме. Выберем пункт Menu Designer. Для первого элемента меню (объект N1) в свойстве Caption укажем – «ТТН, по которым поступили ПТР». Напишем процедуру обработки события OnClick для этого элемента меню:

procedure TFMain.N1Click(Sender: TObject);

begin

FQuery1.ShowModal;

end;

Командой File > Use Unit добавим модуль fmQuery1Unit в раздел implementation модуля fmMainUnit.

 
 


ВНИМАНИЕ! Значение свойства Active запроса Query1 во время работы приложения должно быть равным True.

 
 


Разместим на панели Components модуля данных нашего приложения компоненты Query2 и DataSource2. В свойстве DataSet источника данных (назовем его SourceQuery2) укажем значение Query2 (имя объекта-запроса), а в самом объекте Query2 зададим название БД (свойство DatabaseName получит значение ААА).

Этот запрос строится на основе таблиц Naklad и Zakazcik. Обратимся к свойству SQL компонента Query2, раскроем окно редактора текста запроса и введем следующий текст (предварительно проверив его с помощью утилиты SQL Explorer):

SELECT NNom, NZKod, ZNaim, NData, NSumma

FROM Naklad, Zakazcik

WHERE (NZKod=ZKod) AND

NOT (NNom IN (SELECT PNNom

FROM Plateg))

Чтобы отобразить набор нужных записей на экране, создадим форму командой File > New > Form. Сохраним модуль формы под именем fmQuery2Unit и добавим его в проект Sale командой Project > Add to Project. Изменим некоторые свойства:

Caption = ‘ТТН, по которым не поступили ПТР’ BorderStyle = bsDialog

Name = FQuery2 BorderWidth = 2

Height = 210 Width = 416

Разместим на форме компонент Panel1 (Align = alBottom, Caption = ‘ ‘). Расположим на панели компонент DBNavigator1 и кнопку BitBtn1 (Kind = bkClose). В оставшейся свободной части формы разместим компонент Panel2 (Align = alClient, Caption = ‘ ‘). На этой панели расположим компонент DBGrid1 (Align = alClient).

Командой File > Use Unit свяжем модуль fmQuery2Unit с модулем данных dmSaleUnit. Сохраним все сделанные изменения. Для компонента DBGrid1 раскроем список свойств DataSource и выберем DM.SourceQuery2. Для компонента DBNavigator1 в списке свойств DataSource также выберем DM.SourceQuery2.

Создадим объекты-столбцы для сетки DBGrid1 – дважды щелкнув мышью на сетке, вызовем редактор столбцов и в его контекстном меню выберем команду Add Fields. Добавим последовательно все поля кроме NZKod. Отредактируем свойства каждого столбца. Вид выравнивания значений в столбце зададим, обратившись к свойству Alignment, параметры заголовка зададим, раскрыв свойство Caption.

 
 

Вид окна после всех сделанных изменений показан на рис. 42.

Рис. 42. Рабочее окно для запроса «ТТН, по которым не поступили ПТР»

 

Свяжем вызов этой формы с соответствующим пунктом контекстного меню главной формы. Щелкнем правой кнопкой мыши на компоненте PopupMenu1, расположенном на этой форме. Выберем пункт Menu Designer. Для второго элемента меню (объект N2) в свойстве Caption укажем – «ТТН, по которым не поступили ПТР». Напишем процедуру обработки события OnClick для этого элемента меню:

procedure TFMain.N2Click(Sender: TObject);

begin

FQuery2.ShowModal;

end;

Командой File > Use Unit добавим модуль fmQuery2Unit в раздел implementation модуля fmMainUnit.

 

Создание отчетов

 

Отчеты в системе Delphi 7 ориентированы в первую очередь на печать информации из таблиц БД. Отчет – это виртуальный образ бумажного листа, который в дальнейшем без изменений воспроизводится на принтере.

В Delphi 7 появился набор компонентов Rave Reports (панель Rave), который заменил морально устаревший набор QReports.

 

7.1. Основы технологии Rave Reports

В основе технологии лежит идея отделения процесса разработки от процесса создания отчета за счет использования промежуточного документа, который называется проектом отчета.Проект отчета создается с помощью среды Rave (Report Authoring Visual Environment – визуальная среда автора отчета), а в создаваемую программу внедряется машина генератора отчета, которая по данным, полученным из файла проекта, создает документ отчета.

На вкладке Rave имеются два ключевых компонента – RvProject и RvSystem, перенос которых в программу внедряет в нее машину генератора отчетов. Проект будущего отчета создается заранее с помощью утилиты Report Manager Designer, которая вызывается из Delphi и взаимодействует с загруженной в Delphi программой.

Доступные в Delphi компоненты создания отчетов Rave можно разделить на следующие группы:

1. Компоненты связи с источниками данных:

· RvCustomConnection – поставляет в отчет данные из обычных файлов или массивов в памяти программы;

· RvDataSetConnection – поставляет в отчет данные, получаемые от таблиц BDE (TTable);

· RvQueryConnection – поставляет в отчет данные, получаемые от запроса BDE (TQuery).

2. Компоненты печати отчета:

· RvNDRWriter – сохраняет отчет в двоичной форме (в виде так называемого NDR-потока);

· RvRenderPreview – выводит отчет (файл, подготовленный компонентом RvNDRWriter) в окне предварительного просмотра;

· RvRenderPrinter – выводит отчет (файл, подготовленный компонентом RvNDRWriter) на печать;

· RvSystem – объединяет возможности этих трех компонентов в стандартной визуальной среде просмотра, настройки и печати.

3. Компоненты генерации отчета в других форматах:

· RvRenderPDF – преобразует NDR-поток в PDF-формат с поддержкой графики;

· RvRenderHTML – преобразует NDR-поток в формат HTML 4.0 с поддержкой графики;

· RvRenderRTF – преобразует NDR-поток в RTF-формат с поддержкой графики;

· RvRenderText –преобразует NDR-потокв текст.

 

7.2. Визуальная среда Rave Designer

 
 

Как уже говорилось, технология Rave Reports характерна тем, что отчет создается специальной машиной генерации отчета по указаниям, получаемым из файла проекта отчета. Файл проекта разрабатывается с помощью утилиты Rave Designer, которая создает особую визуальную среду (рис. 43).

Рис. 43. Главный экран проектировщика отчетов

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

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

Некоторые наиболее важные команды представлены восемью верхними инструментальными кнопками. Семь нижних инструментальных кнопок упрощают настройку среды.

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

Таблица 18

Панель Назначение
Drawing Bar Code Standard Report Zoom Colors Lines Fills Fonts Alignment Компоненты для вставки в отчет простейших геометрических фигур Компоненты для отображения различных штриховых кодов Компоненты для вставки в отчет данных, не связанных с БД (поясняющие надписи, многострочный текст, изображения и т. п.) Компоненты для вставки в отчет данных из БД Панель с кнопками, управляющими масштабом отображаемого отчета Панель для изменения цвета выделенного элемента Панель для управления толщиной и стилем текущей линии Панель для выбора стиля заполнения текущей фигуры Панель для выбора шрифта текущего элемента с текстом Панель для управления положением выбранного элемента

 

Окно инспектора объектов похоже на окно инспектора объектов среды Delphi. В нем отображаются свойства объекта, выбранного в области формирования отчета или в дереве объектов. Свойства, определяющие положение и размеры объекта, по умолчанию задаются в дюймах. Вещественные значения используют разделитель целой и дробной частей, заданный настройками Windows (в русскоязычной ОС – запятая). С помощью команды Edit > Preferences > Default > Unit's можно установить другие единицы измерения (в том числе миллиметры или сантиметры). Однако эта установка будет действительной только для нового проекта. Ниже окна свойств находится вспо­могательное окно, содержащее справку о выбранном свойстве.

Область формирования отчета занимает всю центральную часть окна. В ее верхней части находятся вкладки Page Designer и Event Editor, переключающие режимы отображения страницы отчета и ввода/редактирования обработчика событий.

Режим Page Designer – основной режим окна. Отчет может содержать произвольное количество страниц, каждая из которых выбирается щелчком на соответствующей вкладке в верхней части окна. Прообраз страницы отображается в макете печатной страницы в центре окна. Программист формирует этот прообраз, размещая на макете компоненты из области компонентов. Он может в любой момент просмотреть или напечатать отчет, нажав клавишу <F9> или щелкнув на соответствующей инструментальной кнопке.

С помощью команды Tools основную содержательную часть отчета можно сформировать, используя диалоговые окна соответствующих мастеров (для отчета с одной таблицей и отчета главный-детальный).

Расположенное в правой части окно дерева объектов отображает основные объекты проекта отчета – отчеты (проект может содержать произвольное количество отчетов), глобальные страницы и объекты отображения данных из БД.

Режим Event Editor предназначен для создания/редактирования обработчиков событий OnAfterPrint, OnAfterReport, OnBeforePrint, OnBeforeReport, OnGetText.

Язык программирования обработчиков является подмножеством языка Delphi. Язык среды Rave Designer не описан в документации, имеет очень скромные возможности и рассчитан в основном на однострочные операторы присваивания, изменяющие значения того или иного свойства объекта. В нем нельзя использовать локальные переменные, блоки begin...end, try...end, условные операторы.

 

Составляющие проекта отчета

Любой проект отчета имеет три составные части:

· библиотека отчетов (узел Report Library в дереве объектов);

· каталог глобальных страниц (узел GlobalPage Catalog);

· каталог объектов данных (узел Data View Dictionary).

 

Библиотека отчетов

Библиотека отчетов хранит все созданные в проекте отчеты. Каждый отчет независим от других (связь подразумевается создателем проекта). В проекте может быть сколько угодно отчетов. Чтобы начать очередной отчет в рамках текущего проекта, нужно выбрать команду File > New Report или щелкнуть на соответствующей инструментальной кнопке.

Каждый отчет характеризуется своим уникальным именем (свойство Name) и/или полным именем (свойство FullName). В свойстве Description можно поместить комментарий с краткой характеристикой отчета.

Первый созданный в проекте отчет становится умалчиваемым, то есть он печатается командой RvProject1.Execute.

Получить список всех отчетов программа может с помощью такого метода компонента RvProject:

procedure GetProjectList(ReportList: TStrings; FullName: Boolean)

Параметр FullName при обращении к этому методу должен содержать значение True, если программист хочет получить список всех значений свойств FullName, и False, если список свойств Name. Напечатать любой отчет из этого списка можно с помощью метода:

procedure ExecuteReport(ReportName: String)

Для удаления ненужного отчета из библиотеки отчетов следует выбрать его в дереве объектов и нажать клавишу Delete.

Каждый отчет может содержать одну или несколько страниц. Для добавления к отчету новой страницы используется команда File >New Report Page или соответствующая инструментальная кнопка. Для удаления страницы из отчета следует выбрать ее в дереве объектов и нажать клавишу Delete. Если на странице проекта расположена полоса с данными, при печати эта страница воспроизводится столько раз, сколько необходимо для полного отображения всех данных. Каждая страница характеризуется уникальным (в пределах отчета) именем (свойство Name), а также свойствами Orientation, PageHeight, PageWidth и PageSize (размер бумаги, например, Letter 8.1/2 by 11-inch или А4 Sheet, 210 by 297-mm). Страницы печатаются по умолчанию в том порядке, в котором они представлены в дереве объектов. Свойство GotoPage определяет страницу, которая будет печататься после текущей. Изменение этого свойства по­зволяет печатать страницы в произвольном порядке.

Каталог глобальных страниц

Разработчик может создать одну или несколько глобальных страниц, то есть страниц, которые будут доступны из любого отчета. Таким способом можно оформить все отчеты единым образом, например, каждый отчет может предваряться печатью глобальной страницы с названием и эмблемой организации. Чтобы добавить к отчету глобальную страницу, нужно вызвать редактор его свойства PageList. В этом же редакторе можно изменять очередность печати страниц.

Для создания глобальной страницы используется команда File > New Global Page или соответствующая инструментальная кнопка. Чтобы отобразить глобальную страницу на вкладке Page Designer, нужно дважды щелкнуть на ее названии в дереве объектов. Таким способом можно выбирать не только глобальную, но и любую страницу любого отчета.

 

Каталог объектов данных

Каталог объектов данных содержит все определенные в проекте источники данных и, возможно, средства аутентификации пользователей для парольной защиты тех или иных отчетов. Для включения в проект нового объекта данных необходимо выбрать команду File > New Data Object или щелкнуть на соответствующей инструментальной кнопке. В ответ появляется диалоговое окно, позволяющее уточнить тип объекта данных.

Можно выбрать один из следующих типов объектов данных:

· Data Lookup Security Controller – организует аутентификацию пользователя при попытке просмотра или печати защищенного источника данных;

· Database Connection – создает непосредственное соединение с источником данных на основе технологий ADO, BDE или dbExpress с использованием специальных драйверов технологии Rave Reports;

· Direct Data View – создает соединение с НД, созданным в приложе­нии Delphi;

· Driver Data View – создает соединение с ранее созданным в проекте объектом данных Database Connection;

· Simple Security Controller – организует список имен и паролей пользователей для доступа к отчету.

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

Наиболее часто используемый объект данных – Direct Data View – обеспечивает импорт в отчет данных, полученных наборами данных приложения Delphi. Для взаимодействия отчета с НД в приложении Delphi должны размещаться посредники – компоненты RvDataSetConnection (универсальный связной компонент), RvTableConnection (для таблиц) и RvQueryConnection (для запросов). Эти компоненты находятся на вкладке Rave среды Delphi. Каждый публикуемый в отчете НД должен снабжаться соответствующим посредником.

Для добавления в проект нового объекта нужно выбрать команду File > New Data Object или щелкнуть на соответствующей инструментальной кнопке и затем в диалоговом окне выбрать вариант Direct Data View. После щелчка на кнопке Next появится новое окно, в котором предлагается выбрать один из определенных в приложении Delphi объектов-посредников.

Технология Rave Reports позволяет создать отчет, не связанный с какими-либо НД в приложении Delphi, а получающий эти данные непосредственно из БД. Для этого предусмотрен специальный объект данных Database Connection.

Для реализации этой возможности нужно в окне Data Connections выбрать вариант Database Connection, а после щелчка на кнопке Next – одну из технологий (ADO, BDE или dbExpress). Дальнейший диалог зависит отвыбранной технологии.

Объект Database Connection обеспечивает техническую связь отчета с данными, но он не может поставлять эти данные отчету. Поставщиком данных должен быть объект Driver Data View. После выбора этого объекта в окне Data Connections в следующем окне предлагается выбрать один из определенных в проекте объектов Database Connection, после чего появляется окно, которое автоматизирует процесс формирования SQL-запроса к БД. В правой его части содержится список таблиц БД. Запрос формируется путем перетаскивания таблиц на вкладку Layout, где они отображаются в виде перечней всех своих полей. По умолчанию выбраны все поля (установлен флажок *). Установка флажка с именем любого поля снимает флажок * и позволяет выбрать только нужные поля. Для задания реляционных связей главный-детальный поле связи из подчиненного набора перетаскивается на ключевое поле главной таблицы. Так же устанавливается связь с подстановочной таблицей.

С помощью связного компонента RvCustomConnection можно импортировать в отчет данные из внешнего файла. Характер данных, хранящихся в файле, может быть любым – лишь бы программист умел с ними работать.

Два объекта данных – Data Lookup Security Control и Simple Security Control – позволяют защитить проект в целом или какой-то его отчет от несанкционированного доступа. Отличие состоит в том, что первый компонент считывает список имен пользователей и их паролей из таблицы БД, а второй имеет собственный список. Наличие этих объектов в проекте отчета лишь дает возможность проверить право пользователя на получение доступа к данным, однако собственно механизм защиты реализуется программно в приложении Delphi.

 

Типы отчетов

С помощью технологии Rave Reports можно создавать отчеты разных типов – с получением данных из единственного НД, из НД, связанных отношением главныйдетальный, с группировкой данных и т. д.

 

Последнее изменение этой страницы: 2016-08-28

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...