Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABORATORNAYa_RABOTA6.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
543.81 Кб
Скачать

6.7.9 Оператор all

Вторым допустимым оператором является ALL. Действие его противоположно оператору ANY. Оператор ALL становится верным, если все значения из вложенного подзапроса равны значению-кандидату из внешнего запроса. Например если значение - кандидат равно 1, а вложенный подзапрос вернул {1, 1, 1}, оператор ALL станет верным (внешний запрос проверяет на равенство).

Например, если нам необходимо найти всех продавцов, у которых рейтинг выше чем у любого продавца из Рима, можно записать следующий запрос:

SELECT *

FROM Customers

WHERE rating > ALL

(SELECT rating

FROM Customers

WHERE city = Rome ):

Операторы ANY и ALL можно выразить через EXIST в кореллированном подзапросе, в явном виде они нужны лишь для упрощения записи запроса. Обратное утверждение не верно - т.е. не все то, что можно выполнить с помощью EXIST, можно сделать с помощью ANY и ALL

Замечание 1: Когда говорят, что значение больше (или меньше) чем любое (ANY) из набора значений, это то же самое, что сказать, что оно больше (или меньше) чем любое отдельно взятое из этих значений. И наоборот, сказать что некоторое значение не равно всему (ALL) набору значений, это то же самое, что сказать, что в наборе нет такого же значения.

Замечание 2: В случае, если подчиненный запрос вернул пустое множество, оператор ALL становится верным, а ANY - ложным.

6.7.10 Генерация отчетов с помощью компонентов QuickReport

Компонент Quick Report предназначен для генерации отчетов по содержимому базы данных и выводу их на печать. В Delphi5 (C++ Builder 5.0) этот компонент устанавливается по умолчанию. В Delphi 7.0 и выше используется компонент Rave Report, который в настоящей работе не рассматривается. Для установки компонента Quick Report в Delphi 7.0 используйте меню Component/InstallPackages/Add/Program Files\Borland\Delphi7\Bin\dclqrt70.bpl. Для того, чтобы компоненты раздела QuickReport могли функционировать необходимо, чтобы на компьютере был установлен хотя бы один принтер по умолчанию.

Предположим, что нам необходимо получить бумажную копию всех телефонов, имеющихся в записной книжке в формате: «Ф.И.О., Телефон, Тип». Для этого создадим на форме AllQuery дополнительный компонент типа TIBQuery. В свойство SQL занесемтекст запроса: «Select persona.fio, pnumber.pnum, pnumber.ptype from pnumber inner join persona on (pnumber.p_id = persona.p_id)».

Для создания отчета создаем новую форму ReportForm на которой со страницы QReport переносим компонент генератора отчетов QuckRep1 : TQuickRep.

Укажем, что форма ReportForm использует модуль DataModule2 и выполним настройку отчета:

- в свойстве DataSet устанавливаем ссылку на компонент запроса AllQuery;

- в свойстве Bands устанавливаем значение true напротив тех разделов отчета, которые необходимы при его визуализации:HasColumnHeader – заголовки столбцов, HasDetail – зона вывода записей базы данных, HasSummary – итог под отчетом, HasTitle – заголовок отчета.

В раздел Title помещаем два компонента со страницы QReport: QRLabel1:TQRLabel и QRSysData1:TQRSysData. В компонентеQRLabel1:TQRLabel устанавливаем свойство Caption: «Телефонная книга от», а в компоненте QRSysData1 выставляем свойство Data в значение qrsDateTime. Таким образом при выводе отчета в его заголовке будет надпись следующего вида: «Телефонная книга от 16.04.2007 13:21:43».

В разделеColumn Header располагаем компоненты TQRLabel так, чтобы заголовки столбцов позиционировались над данными.

В раздел Detail помещаем компоненты типа TQRDBText, которые ответственны за вывод данных запроса. Для каждого компонента в поле DataField указываем имя поля, откуда компонент отчета получает данные (например, для компонента QRDBText1 это поле AllQuery.FIO). В начале строки раздела Detail располагается компонент QRSysData2, поле Data которого установлено в значение QrsDetailNo (номер стоки очета).

В разделе Summary расположены компоненты QRLabel5:TQRLabel – для вывода сообщения «Итого записей» и QRSysData3 со значением в поле Data QrsDetailCount. В результате при генерации отчета в последней строке будет выведено количество записей телефонной книги.

В целом форма отчета имеет вид, который показан на рисунке 6.1.

Рисунок 6.1 – Форма отчета

Для активизации отчета в режиме просмотра на главной форме проекта располагаем кнопку «Отчет» (рисунок 6.2).

Рисунок 6.2 – Главная форма проекта

В обработчике BtReportClick выполняем активизацию запроса AllQuery и вызываем метод ReportForm.QuickRep1.Preview:

procedure TForm1.BtReportClick(Sender: TObject);

begin

DataModule2.AllQuery.Open; ReportForm.QuickRep1.Preview;

end;

В режиме исполнения отчет имеет вид, показанный на рисунке 6.3.

Рисунок 6.3 – Отчет в режиме просмотра.

С помощью панели инструментов, расположенной в верхней строке отчета можно сохранить его в файл или вывести на печать.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]