Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 944

.pdf
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
672.94 Кб
Скачать

3.Расположить на форме для реализации запроса компо-

ненты DataSource (панель Data Access), DBGrid (панель Data Controls).

4.В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).

5.Установить для компонента DataSource – в свойстве DataSet имя компонента на модуле данных, реализующего запрос, (например, имя_модуля_данных.ADOQuery1 (номер компонента может быть другим)).

Установить для DBGrid – в свойстве DataSource значе-

ние DataSource1.

6.Чтобы выполнить запрос, необходимо в модуле данных установить для ADOQuery в свойстве Active значение True. Результат выполнения запроса будет виден в компоненте DBGrid на форме для реализации запроса.

7.Сохранить произведенные изменения (File, Save All).

Пример 1. Создать запрос, который выбирает поля Tovar и Zena из таблицы Tovary и суммирует поле Kolvo из таблицы Prihod (сумма по полю количество (Kolvo) получает имя Sum_Kolvo). В запросе записи группируются по полям Tovar, Zena (конструкция GROUP BY T.Tovar, T.Zena). Конструкция

WHERE содержит условие связывания двух таблиц (таблицы связаны по полю Tovar) .

SELECT T.Tovar, T.Zena, SUM(P.Kolvo) As Sum_Kolvo

FROM Tovary T, Prihod P

WHERE T.Tovar = P.Tovar

GROUP BY T.Tovar, T.Zena

Пример 2. Создать запрос с групповыми вычислениями по таблице Продажа, в запрос включить поля: Марка, Количество. По полю Количество провести суммирование. Таким об-

29

разом, запрос определяет суммарную продажу бензина для каждой марки бензина.

Select Marka, sum(Kol_pr) as Sum_kol

From Prodaga

Group by Marka;

Пример 3. Создать запрос с групповыми вычислениями по таблице Продажа. Определить суммарную продажу бензина каждой марки за каждый день продаж.

Select Marka, Data_pr, sum(Kol_pr) as Sum_kol

From Prodaga

Group by Marka, Data_pr;

3.4. Создание параметрического запроса

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

Создание параметрического запроса осуществляется следующим образом.

1.Создать или выбрать форму для реализации запроса (создание - кнопка New Form на панели инструментов, 4-я слева на панели инструментов, выбор – кнопка Veiw Form (2-я слева на панели инструментов)). В свойствах формы в поле Name можно задать имя, например, Query4Form.

2.Расположить на модуле данных компонент ADOQuery (панель ADO). Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке и в открывшемся окне набрать запрос на языке SQL.

Параметрами в этом запросе являются имена, перед которыми стоят двоеточия «:». В параметрических запросах параметры заменяют значения, которые могут изменяться в процес-

30

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

Tovar и дате прихода DatPrih).

SELECT Р.* FROM Prihod Р

WHERE (Tovar = :Tovar) AND (DatPrih = :DatPrih)

Закрыть окно, щелкнув по кнопке ОК.

5.В Инспекторе Объектов выбрать свойство Parameters

ищелкнуть по кнопке в строке этого свойства. В появившемся окне будут показаны имена всех параметров, введенных в тексте параметрического SQL-запроса. Каждому параметру из списка необходимо поставить в соответствие определенный тип и стартовое значение. Стартовое значение задавать необязательно. Раскрыть список Value и в строке Type задать для Tovar OleStr (String) (текстовое поле), для поля DatPrih задать в строке Type значение Date (поле типа дата).

6.Для активации запроса в свойстве Active выбрать true. Во вкладке Events модуля данных для события onCreate в

процедуре обработки события дописать:

ADOQuery1.Active := true;

Номер компонента может быть отличным от единицы.

7.Расположить на форме для реализации запроса компо-

ненты DataSource (панель Data Access), DBGrid (панель Data Controls).

8.В модуле, соответствующем созданной форме для реализации запросов, для доступа к компонентам модуля данных в разделе implementation выставить uses unit2 (если модуль данных был создан вторым).

9.Всякий раз, когда необходимо изменить значения параметров запроса, программа должна закрыть Query, присво-

31

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

10.Поместить в форму панель (компонента Panel на панели Standard). Сделать такой размер панели, чтобы на ней поместились две надписи, два окна и кнопка. Для панели в свойстве Caption стереть название.

11.Создать на панели две надписи (кнопка Label на панели Standard). Для надписей в свойстве Caption задать названия полей (например, Товар и Дата прихода).

12.Создать на панели два текстовых поля (кнопка Edit на панели Standard). Для полей в свойстве Text стереть названия.

13.Создать на панели кнопку (кнопка Button на панели Standard). В свойстве Caption задать Выдать.

14.Двойной щелчок по кнопке открывает окно процедуры обработки события. Создать следующий обработчик события OnClick кнопки Выдать (ADOQuery1 может иметь номер, отличный от единицы).

procedure …

Begin

With имя_модуля_данных.ADOQuery1 do begin

Close; Parameters.ParamByName(‘Tovar’).Value := Edit1.Text;

Parameters.ParamByName(‘DatPrih’).Value := StrToDate(Edit2.Text);

Open;

end;

End;

Если дата выбирается из календаря (компонент DateTimePicker), то строка присвоения значения параметру будет иметь вид:

32

Parameters.ParamByName('DatPrih').Value :=

DateTimePicker1.DateTime;

Для компонента DateTimePicker необходимо стереть значение в строке Time, а в базе данных поле типа даты должно иметь краткий формат отображения даты.

15. Сохранить произведенные изменения и проверить работу запроса. В текстовые поля ввести значения (например, название товара и дату прихода). Для выполнения запроса щелкнуть по кнопке Выдать.

4. СОЗДАНИЕ ОТЧЕТОВ

4.1. Создание отчета на основе запроса

Предположим, что существует следующее задание: Создать отчет на основе таблицы «Книги», записи сгруп-

пировать по области (разделу) знаний, рассчитать стоимость книг по каждому шифру книги, по группе записей из одинаковой области (раздела) знаний и ведомости в целом.

Список книг

Шифр

Название

Авторы

Кол-во

Цена

Стоимость

книги

 

 

экз.

 

книг

 

 

Область знаний

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Итого

 

 

 

 

Общий итог

 

Порядок создания отчета с группировкой записей следующий.

1. Первоначально, следует создать запрос на выборку данных из таблиц Разделы знаний (Razd_zn) и Книги (Knigi) с созданием вычисляемого поля «Стоимость книг» и сортировкой данных по полю «Область знаний».

33

Чтобы создать запрос необходимо поместить на модуль данных компонент ADOQuery из закладки ADO. Для данного компонента настроить следующие свойства: в свойстве Connection выбрать ADOConnection1; в свойстве SQL щелкнуть по кнопке и в открывшемся окне набрать запрос на языке SQL; в свойстве Active выбрать true

В данном примере в свойстве SQL компонента можно ввести запрос следующего вида (щелкнув по кнопке …):

SELECT R.R_zn, K.Sh_kn, K.Nazv, K.Avt, K.Kol_ikz, K.Zena, (K.Zena*K.Kol_ikz) As Stoim

FROM Knigi K, Razd_zn R

Where K.Kod_r = R.Kod_r ORDER BY R.R_zn

Во вкладке Events модуля данных для программной активации запроса необходимо в событии onCreate в процедуре обработки события дописать:

ADOQuery1.Active := true;

Номер компонента может быть отличным от единицы.

2.После создания запроса следует поместить на главную форму (где находится меню) компонент RvDataSetConnection1 из закладки Rave. В его свойстве DataSet необходимо выбрать имя_модуля_данных.ADOQuery. Предварительно в тексте программы для главной формы в разделе implementation необходимо выставить uses unit2 (если модуль данных был создан вторым).

3.Затем необходимо перейти в утилиту создания отчетов

RaveDesigner, выбрав пункты меню Tools/Rave Designer.

Дальнейшие действия осуществляются утилитой Rave Designer.

34

4.Если при загрузке Rave Designer открылся какой-то отчет, то следует выбрать пункт меню File/New. Откроется окно создания нового отчета.

Следующий шаг – создание источника данных для от-

чета. Для этого выбирают пункт меню File/New Data Object. В открывшемся окне со списком необходимо выбрать Direct Data View и нажать кнопку «Next». В появившемся окне следует выбрать RvDataSetConnection1 и нажать кнопку «Finish».

5.Далее необходимо сформировать структуру отчета. На пустую область отчета следует поместить компонент Region из

закладки Report - . Все компоненты структуры данных отчета будут наноситься на этот компонент. Компонент Region (серого цвета) следует растащить по всему белому листу, оставив небольшие белые поля.

6. На компонент Region нужно поместить несколько компонентов Band и один компонент DataBand из закладки Report

- и в следующем порядке.

Band1 – здесь будет размещаться заголовок отчета; Band2 – шапка таблицы отчета;

Band3 – значение поля группировки данных отчета; DataBand1 – данные отчета;

Band4 - итог по группам данных отчета; Band5 – общий итог по данным отчета.

7. Теперь необходимо настроить свойства компонентов структуры отчета.

Для компонента Band1 следует выбрать свойство BandStyle и щелкнуть по кнопке . В открывшемся окне в группе опций Print Location надо включить опцию Body Header. Аналогично следует включить опцию:

для Band2 – Row Header; для Band3 – Group Header;

35

для Band4 – Group Footer; для Band5 – Body Footer.

Для компонента DataBand1 необходимо в свойстве

DataView указать значение DataView1 (или DataView2, в за-

висимости от имени источника данных).

8. На компонентах Band1 и Band2 (заголовок и шапка таблицы отчета) следует разместить компоненты Text из за-

кладки Standard () и задать им необходимые значения (например: в свойстве Text указать название; в свойстве Font выбрать шрифт MS Sanc Serif и другие характеристики шрифта; в свойстве FontJustify указать выравнивание). Для прорисовки шапки таблицы следует воспользоваться компонентами HLine

иVLine из закладки Drawing ( и ).

9.Для настройки заголовка и итога группы используют компоненты Band3 и Band4. В свойстве GroupDataView обоих компонентов следует указать DataView1 (или другой источник данных), а в поле GroupKey – R_zn (R_zn - это поле «Раздел знаний», по которому будет осуществляться группировка данных). В поле ControllerBand следует указать DataBand1 (область данных, которая будет группироваться).

Для вывода на экран значения поля группировки на компонент Band3 следует поместить компонент DataText из за-

кладки Report (). В его свойствах DataView и DataField

следует указать источник данных (DataView1 или какой-то другой) и R_zn соответственно.

10. На компоненте DataBand1 следует разместить компоненты DataText для отображения значений полей данных таблицы. В его свойствах DataView и DataField следует указать источник данных (DataView1 или какой-то другой) и выбрать имя поля из списка. Также для подсчета итоговой суммы по полю «Стоимость» на DataBand1 следует поместить компо-

нент CalcController из закладки Report (). Он является не-

36

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

11.На компоненте Band4 (итог по группам) следует разместить компонент CalcText из закладки Report (). В его свойстве DataView следует указать источник данных

(DataView1 или какой-то другой), в свойстве DataField Stoim (поле «Стоимость»), в свойстве Controller CalcController1 (чтобы связать поле с областью данных).

12.Аналогичные операции следует проделать и на компоненте Band5 (общий итог), поместив на нем компонент CalcText (настройки его свойств будут такими же).

13.Можно также добавить ряд поясняющих надписей (компонент Text).

14.Далее следует сохранить отчет с помощью команды меню File/Save, задав файлу проекта какое-либо имя (например Project1.rav или Project2.rav, или какое-то другое).

Закрыть утилиту RaveDesigner и вернуться в Delphi.

Вид отчета в режиме редактирования представлен на рис. 9.

Рис.9. Вид отчета в режиме редактирования

37

15. Затем следует поместить на форму, где находится

главное меню, компонент RvProject из закладки Rave (). В его свойстве ProjectFile следует указать имя файла проекта отчета и путь к нему.

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

RvProject1.Execute;

После запуска программы при выборе пункта меню, вызывающего отчет, или при щелчке по кнопке появится окно просмотра отчета (рис. 10).

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

Var

Path : string; Begin

Path := ExtractFilePath(Application.ExeName);

RvProject1.ProjectFile := Path + ‘Project1.rav’;

End;

В данном тексте Project1.rav – имя файла отчета.

38