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

Лабораторные работы по Delphi

.pdf
Скачиваний:
62
Добавлен:
05.06.2015
Размер:
768.49 Кб
Скачать

1. Откроем стандартной командой проект, находящийся в файле MyExampleDB.dpr и полученный в результате выполнения лабораторной работы № 2. Изменим свойство Caption формы Form1 на «Информация о людях с выводом отчета».

Сохраним все открытые файлы проекта под теми же именами, но только с индексом 2: MyExUnitDB2.pas, MyExampleDB2.dpr.

2.Добавим новую форму в проект с помощью команды главного меню File|New Form. В этой форме будет создаваться отчет. Изменим свойство Caption формы на «список телефонов».

Сохраним форму в файле с именем MyUnitReport2.pas.

3.Установим взаимосвязь между формой Form2 и формой с компонентами, определяющими доступ к БД. Для этого в секции implementation формы

Form2 сразу же после объявления этой секции введем следующую строку:

USES MyExUnitDB2

4.Определим форму Form2 как отчет. Для этого требуется произвести следующие действия:

4.1 Перенесем со страницы QReport палитры компонент в форму Form2 компоненту QuickRep. Она изображается в виде прямоугольной области размером с лист формата А4, с координатной сеткой. В этой области также пунктирной линией отмечена граница области, которая будет распечатана. По умолчанию все поля, которые определяют эту область, равны 1 см.

4.2Кроме того, у формы Form2 появятся линейки скроллинга.

Спомощью инспектора объектов зададим свойству DataSet компоненты QuickRep1 значение Form1.Table1. Таким образом определен источник данных для отображения в отчете – это информация из таблицы People.db.

5.Оформим заголовок отчета. Для этого нужно сделать следующее:

5.1. На форму Form2 со страницы QReport палитры компонент поместим компоненту QRBand (Секция). Она изображается в виде полосы на всю ширину области печати и используется для вывода заголовка отчета.

5.2.Со страницы QReport поместим на компоненту QRBand1 метку QRLabel (Текст в отчете).

5.3.Зададим для компоненты QRLabel1 значение свойства Caption как «Список телефонов», а в сложном свойстве Font установим размер шрифта (Size), равный 16. Поместим эту компоненту в центральной части компоненты QRBand1.

6.Определим секцию для основного отчета, в которую будет выводится информация о людях (из источника данных, определенного в QReport):

6.1.Со страницы QReport поместим на Form2 компоненту QRBand. Она будет находиться под компонентой QRBand1. Изменим свойство BandType этой компоненты на rbDetail, используя выпадающий список. Это означает, что с ее помощью будут выводиться конкретные данные.

6.2.Со страницы QReport поместим на компоненту QRBand2 рядом друг с другом три компоненты QRDBText (Строка с данными из БД). Для этих компонент зададим свойству DataSet значение Form1.Table1, а их свойству DataField соответственно присвоим значения Family,Name, SecName.

Для всех этих строк зададим свойству AutoSize значение False, чтобы иметь возможность изменять размеры полей. Несколько увеличим размеры компонент по горизонтали, примерно до 4 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRBand2.

6.3.Изменим высоту QRBand2 так, чтобы она и компоненты QRDBText1, QRDBText2 и QRDBText3 были примерно одинаковой высоты.

7.Определим секцию подотчета для вывода информации о телефонах:

7.1. Со страницы QReport поместим в Form2 компоненту QRSubDetail (Секция подотчета). Она находится под компонентой QRBand2. Зададим свойству DataSet этой компоненты значение Form1.Table2. Таким образом определим источник данных для отображения в подотчете – это информация из таблицы БД Tel.db. Отметим, что свойство Master, которое определяет основной отчет для подотчета, уже автоматически установлено в QuickRep1.

7.2.Со страницы QReport поместим на компоненту QRSubDetail1 рядом друг с другом две компоненты QRDBText (Строка с данными из БД).

7.3.Для этих компонент зададим свойству DataSet значение Forme1.Table2, а их свойству DataField соответственно присвоим значения Number и Type.

Для всех этих строк зададим свойству AutoSize значение False. Несколько увеличим размеры компонент по горизонтали, примерно до 3 см каждый, и разместим их в строку, одну рядом с другой, начиная с левого края компоненты QRSubDetail1.

7.4.Изменим высоту QRSubDetail1 так, чтобы она и компоненты QRDBText4 и QRDBText5 были примерно одинаковой высоты.

8.Разместим в отчете дополнительную системную информацию: время, дату и номера страниц отчета. Для этого выполним следующие действия:

8.1.Зададим вывод системного времени и даты: выберем компоненту QRBand1 и несколько увеличим ее вертикальный размер. Из страницы QReport перенесем на нее две компоненты QRSysData (Системные данные). Разместим эти компоненты одну под другой в левом верхнем углу секции QRBand1. Для компоненты QRSysData1 зададим свойству Data значение qrsDate, а свойству Text – значение Дата. Для компоненты QRSysData2 зададим свойству Data значение qrsTime, а свойству Text – значение Время. Для обеих компонент зададим

свойству AutoSize значение False,

увеличим их несколько по

горизонтали.

 

8.2.Выберем компоненту QRShape из палитры компонент и поместим ее так, чтобы внутри нее оказались компоненты QRSySData1 и QRSysData2 (поместить эту компоненту необходимо позади, для чего воспользуемся командой главного меню Edit|Send to back).

8.3.Определим вывод номера страницы на каждой странице отчета. Из страницы QReport перенесем на форму Form2 еще одну компоненту QRBand. В тексте модуля она будет иметь имя QRBand3. Зададим ее свойству BandType значение rbPageFooter. Из страницы QReport примерно на середину компоненты QRBand3 поместим компоненту QRSysData. В модуле появится компонента с именем QRSysData3. Для этой компоненты выберем для свойства Data значение qrsPageNumber, а свойству Text зададим значение Страница.

9.Установим взаимосвязь между главной формой проекта Form1 и формой с отчетом Form2. Для этого в тексте модуля формы Form1, в секции implementation, сразу же после ее заголовка добавим строку:

USES MyUnitReport;

10. Поместим в форму Form1 кнопки, которые будут использоваться для вывода отчета и закрытия формы. Для этого выполним следующие действия:

10.1. Со страницы Standart палитры компонент поместим в правый нижний угол формы Form1 две кнопки Button, предварительно освободив этот угол от компонент. Выберем кнопку Button2 и установим свойству Caption значение Выход.

10.2. Активизируем эту кнопку мышью и в появившейся заготовке обработчика события OnClick поместим следующий текст: procedure TForm1.Button2Click (Sender: TObject);

begin

Close;

end;

10.3. Выберем кнопку Button1 и установим ее свойству Caption значение «Отчет».

10.4. Активизируем эту кнопку и в появившейся заготовке обработчика события OnClick поместим следующий текст: procedure TForm1.Button1Click (Sender: TObject);

begin

Form2.QuickRep1.Preview; end;

11. Сохраним внесенные изменения в проекте.

12. Запустим программу. Нажмем кнопку Отчет. В результате будет вызвана утилита QuickReport 2.0, которая отобразит отчет по всем записям в БД «Телефонная книжка». Завершим работу утилиты QuickReport 2.0 нажатием кнопки Close. Завершим работу программы, нажав кнопку Выход.

Обработка задания на печать. Класс TQRPrinter

Класс TQRPrinter является потомком класса TPersistent. Компонента этого класса является неотображаемой. Экземпляр этого объекта создается автоматически при выполнении приложения и может использоваться независимо от наличия компоненты QuickRep. Именно этот объект, который имеет имя QRPrinter, обеспечивает создание отчета, его предварительный просмотр, распечатку, а также возможность сохранения отчета в файле и последующую работу с ним. В основном эти действия и возможности по просмотру отчета, обеспечиваемые классом TQRPrinter, представлены в стандартной форме для предварительного просмотра утилиты QuickReport 2.0.

Вызвать эту форму с отображенным в ней отчетом можно несколькими способами. При проектировании отчета можно выбрать компоненту QuickRep, затем нажать правую кнопку мыши и во всплывающем меню задать команду Preview. При выполнении приложения следует воспользоваться методом Preview этой же компоненты для отображения стандартного окна просмотра отчета. Все действия в стандартном окне осуществляются с помощью кнопочной панели.

Индикатор номера текущей отображаемой страницы с указанием количества страниц находится на строке состояния стандартного окна просмотра. Там же отображается индикатор процесса формирования отчета.

Класс TQRPrinter определяет ряд дополнительных свойств, методов и событий, которые мы рассматривать не будем.

Быстрое создание отчета

Средства быстрого создания отчета можно рассматривать скорее не как эксперт, который предполагает определенную настройку параметров, а как заготовку отчета определенного вида. В этой заготовке отсутствует связь с источником данных, информация из которого выводится в отчете. В Delphi Standart 3.0 для определения источника данных требуется определить характеристики компонент Table, помещенных в форму отчета, которые задают доступ к БД.

Следующие операции позволяют создать заготовки соответствующих отчетов для их дальнейшей модификации:

File|New|Forms|QuickReport Labels – создается заготовка отчета для печати почтовых этикеток. Этот отчет состоит из трех колонок, в которых выводятся прямоугольные почтовые этикетки.

File|New|Forms|QuickReport List – создается заготовка отчета,

выводящего информацию в виде списка. Она включает в себя секцию заголовка отчета, секции заголовка страницы, секцию для вывода данных и секцию окончания страницы.

File|New|Forms|QuickReport Master/Detail – создается заготовка отчета с подотчетом. Она включает в себя секцию заголовка отчета, секцию заголовка страницы, секцию для вывода данных основного отчета, секцию для вывода данных подотчета, секцию для подведения итогов в подотчете и секцию окончания страницы.

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

Кроме того, имеется возможность создать форму с пустой заготовкой отчета. Для этого следует воспользоваться операцией File|New|New|Report. В результате получается форма с помещенной в нее компонентой QuickReport.

Report Wizard – эксперт по созданию настраиваемого отчета

Report Wizard – эксперт, содержащий диалоговые окна, в которых требуется определить, какая информация будет выведена в формируемом отчете. При этом создается отчет, в котором информация выводится списком. Этот эксперт позволяет создавать отчеты на основе локальных БД. На любом шаге работы можно прервать процесс создания отчета, нажав кнопку Cancel, а также из любого диалогового окна (кроме первого) можно вернуться к предыдущему, нажав кнопку <Back. Перемещаться от одного окна эксперта к следующему можно, нажимая кнопку Next>.

Вызвать данный эксперт можно с помощью операции

File|New|Bisuness|QuickReport Wizard.

Задание к лабораторной работе № 3

1. Используя приложение, созданное в лабораторной работе № 2, спроектируйте и создайте отчет, содержащий следующую информацию:

Вариант 1.

Список поставщиков и поставляемых ими деталей (номер, вес и цвет детали), сгруппированный по номеру детали.

Вариант 2.

Список участников соревнований, сгруппированный по городам (с указанием количества участников из каждого города).

Вариант 3.

Список номеров заданий по дисциплинам с указанием коэффициента сложности и ФИО студента, выполняющего задание.

Вариант 4.

Список рабочих, сгруппированных по цехам, с указанием ФИО, должности и заработной платы в порядке ее возрастания.

Вариант 5.

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

Вариант 6.

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

Вариант 7.

Список номеров телефонов, сгруппированных по их типу, с указанием ФИО владельца, адреса владельца и года установки, а также количество телефонов данного типа в конце каждой группы.

Вариант 8.

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

Вариант 9.

Список студентов, сгруппированных по группам, с указанием ФИО студента и всех его оценок.

Вариант 10.

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

Вариант 11.

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

Вариант 12.

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

Вариант 13.

Список нападающих, сгруппированных по командам, с указанием ФИО нападающего, числа заброшенных шайб, даты приема в команду и количества сыгранных матчей. Вывести количество нападающих данной команды в конце каждой группы.

Вариант 14.

Список студентов, сгруппированных по группам, с указанием ФИО студента, номера его зачетной книжки и дисциплин, которые он желает изучать.

Вариант 15.

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

Вариант 16.

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

Вариант 17.

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

Указать общее количество всех лекарств, имеющихся в ассортименте, в конце отчета.

Вариант 18.

Список ветеранов спорта, сгруппированных по виду спорта, с указанием ФИО спортсмена, города и возрастной группы. Подсчитать количество ветеранов данного вида спорта в конце каждой группы.

Вариант 19.

Список рожениц, сгруппированных по палатам, с указанием ФИО матери, ФИО лечащего врача, даты рождения ребенка, пола ребенка, а также количества рожениц в данной палате в конце каждой группы.

Вариант 20.

Список слушателей, сгруппированных по организациям, с указанием ФИО слушателя, названий дисциплин и оценок по каждой дисциплине. Вывести количество слушателей, у которых по всем прослушанным дисциплинам стоит “отлично”, в конце отчета.

Вариант 21.

Список студентов, сгруппированных по группам, с указанием ФИО студента, наименования дисциплины, оценки, даты экзамена по каждому предмету, фамилии преподавателя по предмету, размера стипендии, а также количества студентов в каждой группе.

Вариант 22.

Список больных, сгруппированных по степени тяжести состояния, с указанием ФИО больного, даты рождения больного, ФИО лечащего врача, даты поступления и начального диагноза. Указать количество больных в тяжелом состоянии в конце отчета.

Вариант 23.

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

Вариант 24.

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

Лабораторная работа № 4 Использование запросов при проектировании

приложений

При работе с БД широко применяется понятие запроса к ней. Под запросом понимается требование совершить определенное действие с информацией из БД. Можно выбрать данные в соответствии с заданным условием и отобразить результат – запрос на выборку. Можно также вставить, удалить, обновить определенные записи в БД, используя

соответствующие запросы. Такие требования формируются на специальных языках программирования QBE и SQL. SQL нашел более широкое распространение, в Delphi его можно использовать при создании приложения для работы с БД.

SQL-запрос

На языке SQL можно создать запросы различных типов:

•запрос на выборку данных;

•запрос на добавление;

•запрос на обновление;

•запрос на удаление.

SQL-запрос, созданный с помощью DBD, помещается в файл с расширением sql.

Каждый запрос на языке SQL состоит из нескольких частей, которые начинаются с определенного зарезервированного слова. При записи запросов можно использовать как прописные, так и строчные буквы. Информацию можно разбивать на строки произвольным образом, но желательно в отдельные строки помещать информацию, имеющую определенное смысловое назначение. Для разделения отдельных зарезервированных слов, идентификаторов, чисел, строк, знаков операций и т.д. следует использовать пробелы.

1.Запрос на выборку.

Он предназначен для извлечения данных, находящихся в определенных полях одной или нескольких таблиц и соответствующих задаваемым условиям. Конструкция запроса следующая:

SELECT [DISTINCT] <список выводимых полей> FROM <список используемых таблиц> [WHERE <условие отбора>]

[ORDER BY <порядок сортировки>]

[GROUP BY <порядок группировки>] [HAVING <условие отбора групп>]

[UNION <объединяемый запрос на выборку>]

Рассмотрим подробнее отдельные части запроса.

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

<список выводимых полей>:

[<таблица>.]<поле>[AS <псевдоним>]{,[<таблица>.]<поле>[AS <псевдоним>]}, где таблица – имя таблицы, если в запросе присутствует только одна таблица, его можно опустить; поле – имя поля; псевдоним – псевдоним для имени поля является локальным в запросе; AS – оператор, ставящий в соответствие конкретному полю псевдоним. Если требуется получить данные из всех полей таблицы, то достаточно указать * вместо перечисления всех имен полей.

<список используемых таблиц>:

“<файл с таблицей>” [<псевдоним>]{,”<файл с таблицей>”[<псевдоним>]}.

WHERE – зарезервированное слово, с которого начинается оператор задания условий.

<условие отбора>:

Условие, устанавливающее объединение:

[(<таблицаM.поле1> <условие> <таблицаN.поле2>)]{AND|OR (<таблицаI.поле1> <условие> <таблицаJ.поле2>)}, где таблицаM, таблицаN, таблицаI, таблицаJ – имена объединяемых таблиц; поле1, поле2 – имена полей в этих таблицах, по соответствию значений которых устанавливается взаимосвязь таблиц; условие – определяет соответствие значений в заданных полях двух таблиц, например: равенство, больше, меньше, не равно и другие операции сравнения; условий может быть несколько, в этом случае они объединяются при помощи круглых скобок и логических операций AND и OR. Если условие для объединения отсутствует, формируется результат, представляющий собой всевозможные объединения записей всех таблиц.

Условие на значение полей:

[[<таблица>.]<поле> <условие> <значение>] {AND|OR [<таблица>.]<поле> <условие> <значение>}.

Помимо математических, используются также логические операторы сравнения, предикаты IN, LIKE и другие.

ORDER BY – зарезервированное слово, с которого начинается оператор задания порядка сортировки.

<порядок сортировки>:

[<таблица>.]<поле> [ASC|DESC] {,[<таблица >.]<поле> [ASC|DESC]},

где ASC (по умолчанию) или DESC – определяют порядок сортировки соответственно по возрастанию или убыванию.

GROUP BY – зарезервированное слово, с которого начинается оператор задания порядка группировки.

<порядок группировки>:

[<таблица>.]<поле> {,[<таблица>.]<поле>}.

2.Запрос на добавление.

Этот запрос позволяет добавить запись в таблицу и присвоить значения ее полям. Конструкция запроса следующая:

INSERT INTO “<файл с таблицей>” (<поле>{,<поле>}) VALUES (<значение>{,<значение>}).

Рассмотрим подробнее отдельные части запроса:

файл с таблицей – имя файла с таблицей, в которую добавляется запись; должен быть с расширением и содержать путь; поле – имя поля, которому задается значение.

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

3.Запрос на обновление.

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

UPDATE “<файл с таблицей>”

SET <поле> = <значение>{, <поле> = <значение>} [WHERE <условие отбора>]

Рассмотрим некоторые части запроса:

SET – зарезервированное слово, с которого начинается оператор, задающий список подставляемых значений; <поле> = <значение>{, <поле> = <значение>} – список полей и значений, которые задаются этим полям.

[WHERE <условие отбора>] – оператор, задающий условие отбора тех записей, в которых следует обновить данные.

4.Запрос на удаление.

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

DELETE FROM «<файл с таблицей>» [WHERE <условие отбора>].

Запрос к БД (Query)

Использование одной компоненты Table позволяет работать только с одной таблицей. Поэтому, когда необходимо работать с несколькими связанными таблицами, нужно создавать соответствующее число компонент Table. В этом случае целесообразно взять компоненту Query класса TQuery, являющегося потомком класса TDBDataSet. Эта компонента позволяет определить набор данных на основе нескольких таблиц с помощью SQL- запроса. Ее также удобно применять, когда таблица БД чрезмерно велика; в этом случае с помощью запроса можно ограничить набор рассматриваемых данных. Использование этой компоненты связано со знанием языка SQL.

Отметим сразу, что можно создать оператор Delphi SQL при помощи компоненты Query следующим образом:

1) поместить на форму объекты Query, DataSource и связать их вместе;

2)присвоить псевдоним объекта TQuery свойству DataBaseName;

3)с помощью свойства SQL ввести указание SQL;

3) установить свойство Active в значение True.

Если каждый шаг был завершен правильно и если BDE установлено корректно, сетка должна будет содержать записи из указанной таблицы.

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