Автор работы: Пользователь скрыл имя, 26 Января 2013 в 14:13, лекция
Программирование баз данных - очень большой и серьезный раздел самого что ни на есть практического программирования. На предыдущем курсе "Введение в программирование на Delphi" мы лишь коснулись этой темы, затронули даже не верхушку айсберга под названием Базы Данных, а только его макушку. Между тем, многие программисты большую часть своего времени тратят именно на проектирование баз данных и разработку приложений, работающих с ними. Это неудивительно - в настоящее время каждая государственная организация, каждая фирма или крупная корпорация имеют рабочие места с к
HasColumnHeader - Заголовки колонок. Здесь мы будем вписывать названия колонок таблицы.
HasDetail - Детальная информация. На этой ленте формируются строки таблицы.
HasPageFooter - Подвал (нижний колонтитул). Здесь можно установить информацию, которая будет появляться в нижней части каждой страницы.
HasPageHeader - Шапка (верхний колонтитул). Здесь можно установить информацию, которая будет появляться в верхней части каждой страницы.
HasSummary - Суммарная информация. Содержимое этой полосы печатается один раз в самом конце отчета.
HasTitle - Заголовок отчета.
Переведите в True полосы HasPageHeader, HasTitle, HasColumnHeader, HasDetail и HasPageFooter. Не установленной останется только полоса HasSummary. Если вы дважды щелкните мышью по свободному месту холста, появится настроечное окно:
Рис. 11.2. Окно настроек компонента QuickRep
В этом окне можно выполнить большинство настроек, причем в Инспекторе объектов соответствующие свойства будут изменены автоматически. Как видите, установленные нами полосы отмечены "галочкой" в разделе Bands окна. Выше располагается раздел Page frame, в котором можно задать обрамление для верхней (Top), нижней (Bottom), левой (Left) и правой (Right) границ холста, а также изменить цвет и ширину обрамления. Те же действия можно выполнить в Инспекторе объектов с помощью параметров раскрывающегося свойства Frame(пока открыто окно настроек, менять свойства в Инспекторе Объектов не получится).
Еще выше располагается раздел Other, где можно установить общие данные для холста - шрифт, размер шрифта и единицы измерения (по умолчанию mm - миллиметры). В Инспекторе объектов за это отвечают свойства Font и Units.
Далее находится раздел Margins (Границы, края), где можно задать расстояния от краев листа до рабочей части холста. На самом верху окна располагается раздел Paper size (Размер бумаги), где задаются тип листа и его размеры. Данные этих двух разделов можно изменить в Инспекторе объектов в раскрывающем свойстве Page.
Еще следует обратить внимание на свойство Options, которое имеет три параметра:
FirstPageHeader - Разрешает печать заголовков (шапку) первой страницы, если равно True.
LastPageFooter - Разрешает печать подвала последней страницы, если равно True.
Compression - Разрешает сжатие отчета при формировании из него метафайла (отчет представляет собой изображение), если равно True.
Свойство PrintIfEmpty разрешает (True) или запрещает (False) печатать отчет, если в нем нет никаких данных.
Свойство ShowProgress разрешает или запрещает показывать индикатор процесса печати отчета. По умолчанию индикатор разрешен.
Свойство SnapToGrid разрешает или запрещает привязывание компонентов к сетке. По умолчанию привязка разрешена.
Свойство Zoom имеет тип Integer и позволяет изменить масштаб отображения отчета при его разработке. Значение 100 указывает, что отчет показывается в 100% от листа бумаги. Изменение этого свойства не влияет на масштаб печати отчета или его предварительного просмотра.
Теперь приступим к
Установим для этого свойства значение qrsDateTime, чтобы пользователь мог видеть, когда был сформирован отчет. Далее выделим всю полосу Page Header и в свойстве Frame переведем в True параметр DrawBottom. Это свойство позволяет задать обрамление выделенной полосе, а параметр DrawBottom рисует линию в нижней части полосы. То есть, мы визуально отделили колонтитул от данных листа.
В нижней части холста располагается полоса Page Footer (подвал). Здесь желательно установить верхнюю линию в свойстве Frame, отделив от данных нижний колонтитул. А по центру полосы установить еще один компонент QRSysData, установив свойство Data в значение qrsPageNumber. Этот компонент будет выводить номер текущей страницы в нижней части листа.
Примечание: для того, чтобы увидеть отчет в окне предварительного просмотра, не обязательно компилировать программу. Достаточно щелкнуть правой кнопкой мыши по свободному месту листа QuickRep, и в контекстном меню выбрать команду Preview. При этом следует иметь в виду, что такие данные, как значения вычисляемых полей, например, видны не будут. Эти данные станут доступны только в режиме выполнения программы.
Колонтитулы мы установили, займемся данными. Прежде всего, напишем заголовок отчета. Для этого установите компонент QRLabel в центре полосы Title. QRLabel похож на обычный Label и служит тем же целям: выводит на лист какой то текст. Выделите его, и в свойстве Caption напишите "Отчет по кадрам". Чтобы заголовок был красивым, щелкните дважды по свойству Font, чтобы открылось окно шрифта. Здесь установите шрифт Times New Roman, начертание выберите жирное, а размер шрифта пусть будет 18 (вы можете использовать настройки по собственному выбору). Можно изменять и цвет шрифта, но при этом имейте в виду, что чаще всего отчеты печатают на черно-белых принтерах, так что злоупотреблять разными цветами не рекомендуется.
Далее займемся полосой Column Header (Заголовки колонок). Здесь установите рядом пять компонентов QRLabel, в свойстве Caption которых напишите
Фамилия
Имя
Отчество
Дата рождения
Образование
Это будут названия колонок таблицы. Шрифт этих компонентов также желательно сделать крупнее, но не больше заголовка.
Далее займемся полосой Detail, на которой, собственно, и будет формироваться таблица. Здесь нам нужно будет в самом крайнем положении слева установить компонент QRSysData, в свойстве Data которого выбрать qrsDetailNo - перед каждой строкой будет выходить ее номер. Далее установите пять компонентов QRDBText, в которых будут отражаться данные из соответствующих полей таблицы. Эти компоненты соответствуют обычному DBText, с которым мы неоднократно сталкивались. Расположите их точно под названиями столбцов, чтобы таблица была красивой. При этом может оказаться, что компонент QRSysData "наплывает" на QRDBText - ничего страшного, данные все равно не будут мешать друг другу. Выделите все QRDBText, и в их свойстве DataSet выберите нашу таблицу fDM.TLichData, затем поочередно в свойстве DataField этих компонентов выберите соответствующие поля таблицы:
Фамилия
Имя
Отчество
Дата_Рожд
Образование
Кроме того, сам компонент QuickRep1, который является "холстом" отчета, также должен знать, из какой таблицы ему нужно брать данные. Поэтому выделите его, и в свойстве DataSet также выберите нашу таблицу fDM.TLichData. Если этого не сделать, то в отчете будет выходить лишь текущая запись таблицы, а не все ее записи.
Собственно, отчет уже готов:
Рис. 11.3. Отчет
Вернитесь в главное окно проекта и сгенерируйте обработку команды меню "Отчеты - Кадры". В созданной процедуре напишите такую строку (вы ведь добавили к главному окну командой File - Use Unit наш отчет?):
{Отчет Кадры}
procedure TfMain.N5Click(Sender: TObject);
begin
fRepKadr.QuickRep1.
end;
После того, как вы сохраните проект, скомпилируете его и выполните команду меню, появится подобное окно с отчетом:
Рис. 11.4. Окно отчета
Как видите, окно уже содержит весь необходимый инструментарий в панели инструментов - позволяет настроить вид отчета, листать его страницы, сделать установку принтера и распечатать отчет, а также сохранить отчет в специальный файл с расширением *.qrp с возможностью последующей его загрузки. К сожалению, интерфейс этого окна доступен только на английском языке.
Наш отчет был бы красивей, если бы полученная таблица была очерчена рамкой. Исправим этот недостаток. На вкладке QReport имеется компонент QRShape, который позволяет рисовать простейшие линии и фигуры. Он имеет свойство Shape, в котором можно задать нужную фигуру. Возможные значения этого свойства:
Этот компонент можно
Рис. 11.5. Компоненты QRShape играют роль
границ таблицы
В результате таблица отчета приняла вид:
Рис. 11.6. Таблица отчета с границами
Результат может не сразу получиться таким - придется поэкспериментировать с расположением и размерами прямоугольников QRShape.
Часто бывает, когда недостаточно получить отчет по данным только из одной таблицы. И здесь можно поступить двумя способами:
Итак, QRSubDetail - это полоса, которая импортирует в отчет данные из подчиненной таблицы.
Создайте в проекте новую форму, назовите ее fRepTelephons, а модуль сохраните как RepTelephons. Сразу же к этому окну командой File -> Use Unit подключите модуль с наборами данных DM, а к главному модулю подключите только что созданный RepTelephons.
Установите на новую форму основу отчета QuickRep. Проверьте, чтобы он не был смещен по отношению к листу (свойства Left и Top равны 0).
В свойстве DataSet компонента-основы выберите fDM.TLichData, то есть, таблицу с личными данными.
Теперь создайте на основе полосы Page Header, Title, Column Header и Detail.
На верхнюю полосу Page Header установите по краям два компонента QRSysData, в свойстве Data у первого выберите qrsDateTime, а у второго qrsPageNumber. Кроме того, переведите в True параметр DrawBottom у свойства Frame полосы Page Header, чтобы отделить линией верхний колонтитул.
Далее, на полосу Title установите один компонент QRLabel, на котором напишите заголовок "Отчет по телефонам сотрудников". Измените шрифт, начертание и размер, как в прошлом примере, и отцентрируйте заголовок по полосе.
Ниже идет полоса Column Header с заголовками таблицы. Как и в прошлом примере, требуется из компонентов QRLabel сформировать заголовки столбцов, но в этот раз ограничимся только тремя заголовками: "Фамилия", "Имя" и "Отчество". К слову сказать, чтобы не делать работу дважды, вы можете открыть форму fRepKadr из прошлого примера, выделить нужные компоненты и командой всплывающего меню Edit -> Copy скопировать их. Затем перейти в новую форму, выделить нужную полосу, и командой Edit -> Paste вставить эти компоненты.
Далее у нас идет полоса Detail, на которой нам нужно разместить три компонента QRDBText, которые привязать к соответствующим полям (не забудьте про свойства DataSet и DataField этих компонентов). Еще в свойстве Frame полосы Detail желательно перевести параметр DrawTop в True, чтобы каждая запись отчета отделялась линией.
Пока что все, что мы делали, было практически таким же, как в прошлом отчете. Теперь добавим в отчет связанные данные из другой таблицы. Установите компонент QRSubDetail - эта полоса должна быть самой нижней. Сначала нужно выбрать главный по отношению к этому компонент: в свойстве Master выберите QuickRep1. Кроме того, полоса QRSubDetail должна знать, откуда листать данные, поэтому в свойстве DataSet полосы выберите fDM.TTelephones.
Далее установим на полосу один компонент QRLabel, напишем на нем "Телефон:".
Слева от него установите два компонента QRDBText, в свойстве Dataset которых выберите fDM.TTelephones, а в свойстве DataField выберите соответственно, поля "Телефон" и "Примечание". Теперь мышью немного перетащите нижний край полосы, чтобы сделать ее поуже.
В результате у вас должна получиться форма, подобная этой:
Рис. 11.7. Отчет по телефонам
Наш отчет готов. Создайте процедуру вызова этого окна в команде главного меню Отчеты -> По телефонам, и пропишите там вызов
fRepTelephons.QuickRep1.
Сохраните проект, скомпилируйте и запустите его. В результате выбора этой команды мы получим подробный отчет по телефонам сотрудников:
Рис. 11.8. Окно отчета по телефонам
Отчет по адресам сотрудников создается точно таким же образом, и теперь вы сможете сделать его самостоятельно.
Отчет можно не только распечатать. Его также можно сохранить в специальном формате *.qrp, а затем загрузить в окно предварительного просмотра. Для этого соответственно служат кнопки "Save Report" и "Load Report" на панели инструментов окна предварительного просмотра:
Рис. 11.9. Кнопки "Save Report" и "Load
Report"
Однако бывают случаи, когда отчет желательно сохранить в каком-нибудь общем формате, например, в текстовом, или html (web-страница). Тогда отчет можно было бы просмотреть в стандартном Блокноте или web-броузере, переслать сотруднику, у которого ваша программа не установлена. На вкладке QReport имеются компоненты, которые позволяют это сделать.