Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
база данных.docx
Скачиваний:
167
Добавлен:
24.03.2015
Размер:
5.83 Mб
Скачать

Значения свойств компонентов

Компонент

Свойства

Значения

Table 1

DataBaseName

dbdemos

TableName

Animals dbf

Active

true

DataSourcel

DataSet

Tablel

DBGridl

DataSource

DataSourcel

DBNavigatorl

DataSource

DataSourcel

Д тя автоматизации процесса создания формы, использующей компонен ты для операций с БД, можно вызвать Database Form Wizard (Мастер форм баз данных). Этот Мастер расположен на странице Business Хранилища объектов.

Мастер позволяет создавать формы для паботы с отдельной таблицей и со связанными таблицами, при этом можно использовать наборы данных Table или Query

11.9. Работа с отчетами

Отчет представляет собой печатный документ, в котором содержит такие же данные, как получаемые в результате выполнения запроса к БД. Можно выделить с ледующие виды отчетов: простой; с группирован] [ем данных; для таблиц, связанных отношением «главный-подчиненный»; составной, объе­диняющий несколько разных отчетов. В С++ Builder для создания отчетов служит генератор отчетов Quick Report, сод( ржащий большой набор компо­нентов. Мы рассмотрим спедетва создания отчета и приведем пример созда­ния простого отчета.

Компоненты отчета

Компоненты, предназначенные для создания отчетов, находятс я на стра­нице QReport Палитры компонентов. Болыпинст во компонентов отчета яв­ляются визуальными. Многие из них мало отличаются от аналогичных ком­понентов страниц Standard, Additional и Data Controls. Например, компоненту QRImage соответствуют компоненты Image и DBImage.

Главным элементом отчета является компонент-отчет QuickRep, пред­ставляющий собой основу, на которой размещаются другие компоненты. Ком­понент QuickRep обычно размещается на отдельной фирме, предназначен­ной ддя создания от чета. По умолчанию он имеет имя QuickRepl. Если на форме размещается другой отчет (обычно так не делается), он получает имя QuickRep2 и т. д.

Компонент QuickRep при помещении его на форму имеет вид страницы формата А4, первоначально отображаемой в натуральную величину. При раз рабогке приложения можно изменить масштаб страницы и размещенных на ней компонентов с помощью свойства Zoom типа int. Значение этого свой­ства останавливает ся в процентах, по умолчание 100%.

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

Компонент QuickRep связывается с набором данных Table или Query, для которого создается отчет, с помощью свойств; DataSet. 1 [ри этом набоо дан ных Query может содержать записи, выбранные из разных таблиц. При печати отчета в процессе выполнения приложения набор данных должен быть открыт. Во время построения отчета можно испо. [ьзовать специально создаваемый на­бор данных и размещать его на форме, при этом источник данных DataSoi iree не требуется. На практике компонент QuickRep обычно связывается с набо ром данных, записи которого отображаются на форме в визуальных компонен­тах. В этом случае в отчет попадают записи, удовлетворяющие, например, кри­терию фильтрации и/или сортировки, задаваемому пользователем.

Пример. Связывание отчета с набором данных.

void fastcall TForm2::Form( ;reate(TObject *Sender)

{

QuickRepl->DataSet=Forml->Tablel;

}

Отчет QuickRepl, находящийся на форме Form2, при обработке события OnCreate этой формы (зязыва< тся с набором данных Table 1, расположенным на форме Form 1. В файле реализации (исходного кода) модуля ф( фмы Form2 следует поместить директиву препроцессора #include «Unitl .h» для подклю­чения заголовочного Файла модуля формы Forml.

iJ

Отчет состоит из отдельных полос — составных частей отчета, которые определяют содержание и вид созданного документа. Полоса представляет собой элемент отчета. Каждый элемент размешается на своем месте и пред­назначен для отображения соответствующих компонентов отчета и вывода данных. Возможный вид отчета при разработ ке покати на рис. 11.23.

fcf. Furni2

Ы ! ' Г ' м I • , . ;

Книги по прогоаммиоованин

t 1 .

!<-

Авторы Яазванир Издательств!

l j l -1 l _|

г -i год

l -i

" "Titlf' f-'ubi^hingJHoiise* ■ l l -j

Vear

l_l

г , .

Рис. 11.23. Вид отчета при разработке

  • PaperSize — формат страницы (по умолчанию А4);

  • TopMargin, BottomMargin, LeftMaigin и RightMargin — размер верхне­го, ш.жщ го, левого и правого полей, соответственно.

Единицы измерения с границ, полос, полей, а также других элементов от - чета определяет свойство Unit гипа TQRUnits, принимающее, к примеру, сле­дующие значения:

  • Inches — дюймы;

  • ММ — миллиметры (по умолчанию);

  • Characters — авт оматическая настройка р соответствии с размером сим­волов, установленным свойством QuickRcp->Fonl->Size.

При необходимости разрчоотчик может изменить параметры с границы, а также многие другие параметры отчета (например, шрифт по умолчанию) с помощью Инспектора объектов или в диалоговом окне Report Set Jug (Уста­новки отчета) установки параметров отчета. Оно вызывается командой Report Setting контекстного меню страницы отчета или двойным щелчком на странице отчета.

Страниц? отчета может иметь рамку, параметры которой задаст свойство Fran ie типа TQRFrame.

С помощью свойства PrinterSetting типа TQuickRepPrinterSettings уста­навливаются параметры принтера, например: FirstPage и LastPage — номер первой и последней печатаемой страницы. Параметры принтера можно уста­навливать также с помощью стандартных диалоюв Printbialog и PrinterSetnpDialog или метода Printei Setup.

Отчет характеризуется тремя параметрами, которые задаются в свойстве Options множественного типа TQuickReportOptions:

  • Fii stPageHeader — печать верхнего колонтитула на первой странице отчета;

  • LastPageFootei — печать нижнего колонтитула на последней странице отчета;

  • Compression — отчет сохраняется в сжатом формате, при этом умень­шается объем занимаемой памяти, но снижается быстродействие.

Свойство PriiitlfEmpty типа bool определяет, выводить ли данные отчета для пустого набора данных. По умолчанию свойство имеет значение true, и отчет печатается, д?же если в наборе данных нет ни одной записи. Э го удоб­но, например, при печати бланков. Если свойству PrintlfEmpty установить значение false, то для пустого набора данных отчет не выводится, точнее, вы­водится пустая страница. То есть при отсутствии записей отсутствует не толь­ко область данных, но и ряд других полос, например, заго. ювок отчета.

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

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

Если компонент-отчет QuickRep ссязан с набором данных, записи которо­го выводя гея в сетке DBGrid формы, то порядок записей отчета соответст ву- ет порядку записей, видимых пользователем на форме. После отбора (фильт­рации) записей и/или сортировки при нажатии кнопки Печать происходит вывод отчета, причем учитыва тся новый состав и порядок следовгния запи­сей.

При формировании отчета изменяется положение указателя текуще й за­писи, поэтому при необходимости разработчик должен предусмотреть запо­минание и восстановление положения указателя, например, с помощью зак­ладки.

Пример. Процедура предварительного просмотра и печати отчета.

void fastcall TForm l::Button2Click(TObject *Sender) {

TBookmark bm; bm= Tablet->Get t5ookmark(); // Просмотр отчета Form2 >OuickRepl->Preview(); // Печать отчета Fonii2->QuickRepl->Print(); Tablel->GotoBookmark(bm): Tablel->EreelJookmark(l)m); )

Закладка bm используется для запоминания и восстановления положе ния указателя текущей записи. В файле исходного кода модуля формы Form 1, из которой выполняется печать отчета, следует указать директиву препро­цессора #include "Unit2.h" для подключения заголовочного файла модуля формы Form2, в которой разме щен компонент отчета.

При печати отчета генерируются события BeforePrint и AfterPnnt типа TQRBeforePrintEvent. С помощью обработчика первого события можно за­дать действия, выполняемые непосредственно перед печатью отчета, а с по­мощью обработчика второго события — действия, выполняемые сразу после окончания печати.

В процессе выполнения приложения для предварительного просмотра от­чета перед печатью служит метод Pre ■ew, вызывающий окно просмотра. В этом окне можно выполни гь следующее: просмотрев отчет в различных ма( штабах: сох] «нить отчет в файле; загрузит ь предварите пьно сохраненный отчет; напоавитъ отчет в печать.

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

На этапе разработки приложения также можно просмотреть отчет, выпол­нив команду Preview (Просмотр) контекстного меню отчета. Внешний вид отчета будет таким же, как при печати или в окне просмотра при выполнении приложения, за исключением отсутс7 вия значений вычисляемых полей.

Разработч1i: имеет возможность создать свое окно предварительного про­смотра отчета, использовав компонент QRPreview.

Полоса птчета (компонент QRBand) является основной составной час­тью (элементом) отчета, на которой разм< щ-иотся другие его компоненты.

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

  • rbT itle - заголовок отчета (печатается в начале отчета под верхним ко лонтитулом);

  • rbPageHeader — верхний колонтитул, который печатает! я сверху на каж­дой странице, в том числе на первой, если включен (по умолчанию) пара­метр FirstPageFooter свойства Options компонента отчета; если этот па­раметр выключен, то верхний колонтитул на первом листе не печатается;

  • rbDetail — данные записей набора данных; выводятся цля каждой запи­си набора данных;

  • rbChild — дочерняя полоса, печатаемая после полосы, с которой он? свя­зана.

При установке типа полосы она автоматически разм< щается на своем мес­те в отчете и выравнивается по ширине страницы отчета с учетом левого и правого полей. Разработчик не имеет возможности переместить полосу на друго< место с помощью мьтшм. Изменить ширину полосы можно косвенно, изменяя размеры страницы и полей. Высота полосы меняете я путем передви­жения мышью верхней или нижней рамки полосы или через установку зна­чения свойства Height в Инспекторе объектов.

Добавить новую полосу к отчету можно следующими двумя способами:

  • поместить компонент QRBand в отчет и присвоить т ребуемое значение свойству BandType;

  • установить значение true соответствующему подсвойству свойства Banas компонента QuickRep, при этом к от чету добавляется полоса, а ее свой­ству BandType автоматически устанавливается нужное значение.

При создании в отчет нужно включать не более одной полосы каждого вида, так как при печати отч< та «лишние» полосы одного и того же вида учиты­ваться не будут. Полосы определенного вица, например, полоса rbDetail при формировании отчета создаются автоматически для каждой записи набора данных.

В процессе выполнения приложения при вызове метода Preview также ге­нерируются события BeforePrint и After Print.

После создания полосы определенного гипа в ней размешаются соответ­ствующие компоненты, при этом необходимо использовать только компонен­ты стюаницы QReport. Размещение на полосе других компонентов, напри мер, Label или Edit, не вызывает ошибки трансляции, но в сформированный отчет такие компоненты не попадают.

Мож! ю разместить компонент отчета и вне i юлосы — непосре, ютвенно на ком поненте-отчете QuickRep. В этом случае он будет выводиться на каждой страни­це от чета (например, компонент QRImage, содержащий логотип фирмы).

Обычно используются следующие компоненты отчета:

  • GRLabel — надпись, содержащая текст (аналог надписи Label), которая может размешаться на любой полосе, но для полос данных обычно не используется;

  • QHPBText — значение поля записи (аналог компонента DBText); обыч­но размещается в полосе данных;

  • QRFxpr - значение, формируемое на основе выражения, в котором мо гут использова гься значения полей записей: обычно используется для полос данных и нижних колонтитулов;

  • GRSysData — системная информация, обычно используемая для ит) говых полос и полос колонтитулов: ее вид определяется свойством Data типа TQRSysDataType, принимающим, к примеру, значения:

  • qrsCuluinnNo — номер текущего столбца (для одноколоночного от­чета равен единице);

  • qrsDateTime — текущие дата и время;

  • QRImage - графический образ, загружаемый аналогично i рафическо- му образу Image (может быть использован в любой полосе, но обычно не размещается в полосах данных); с помощью компонента QRIrnape выводится, например, логотип организации; кроме того, следует отли- ча гь этот компонент и от компонента QRDBIr ладе, киторый обычно раз­мещается в полосе данных и отображает рисунок из поля таблицы;

  • QRShape — геометрическая фигура, размещаемая в любой полосе.

Перед компонентом GRSysData может находиться надпись, которая указы­вается в свойстяе lext тина AnsiStri1 д. По умолчанию надпись отсу гствует

Простой отчет

Простой отчет представляет собой отчет на основе данных из одною набо­ра данных и содержит сведения, которые выводятся в табличном виде без дополнительных условий, например, группирования данных. Размещение и вид печатаемых в отчете данных ана логичны размещению и виду данных, ото бражаемых в сетке DBGri j. Отличием является то. что тайные отчета разме­щаются не на форме, а на бумажном документе, и их нельзя редактировать.

Рассмотрим дейс гвия, выполняемые при подготовке простого отчета, на примере перечня книг по программиров шию (см. рис. 11.23). Мноше из этих действий испо. 1ьзуются и при разработке отчетоь других видов. Для созда­ния простого отчета т ребуется выполни гь следующее:

  • разместить на форме компонент QuickRep:

  • создать для компонента Qi"OkRep требуемые полосы отчета;

  • разместить в полосах нужные компоненты отчета, чаще всего QRLabel. QRDBText и QRExpr;

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

Размещение на форме компонента от чета, установка параметров отчета, а также создание обработ чика события нажатия кнопки печати рассмотрено при описании компонента QuickRep выше.

П ростой отчет может содержать следующие полосы, перечисляемые в по­рядке их размещения на странице:

  • верхний колонтитул (rbPageHeader);

  • заголовок отчета (rbTitle);

  • заголовки столбцов (rbColumnHeader);

  • данные (rbDetail);

  • итог отчета (rbSummary);

  • нижний колонтитул (rhPageFooter)

На этапе разраб< тки название каждой полосы выводится серым цветом в ее левом нижнем углу.

Можно добавит ь к проекту шаблон простого отчета, вызвав командой меню File/New/Other... (Файл/Новый/Другой) Хранилище объектов и выбрав на странице Forms (Формы) объект QuiCkReport L 1st (Лист отчета). Шаблон этого отчета содержит полосы заголовка отчета, заголовкоь столбцов и дан­ных, нижний колонти гул и расположен на отдельной форме QRListForm. На форме отчета также расположен набор данных Table.

Заголовок отчета выводится один раз на первой странице сразу под вер­хним колонтитулом, если он есть. В полосе заголовка обычно размещаются надписи QRLabel, содержащие требуемый текст (как правило, в качестве заголовка выводится название всего отчета). При необходимост и в заголов­ке можно разместить, например, сведения о названии, адресе и телефоне организации, а также логотип. В приведенном на рис. 11.23 примере в поло­се заголовка находятся название отчета. Для вывода названия отчета исполь­зуется компонент QRIabel, в kotodom набоан текст Книги по программи­рованию.

Полосы заголовков столбцов и данных яв.'ьиются основными полосами, в которых размещаются компоненты, обеспечивающие табличный вывод содер­жимого набор? данных. Заголовки столбцов выводятся на каждом листе отчета.

Для заголовков столбцов 1анных в полосу зато, лвков о Зычно помещаются ком­поненты QRIabel, в которые заносится текст, соответствующий полям данных.

Для вывода значений полей записей в полосу данных обычно помещаются компоненты QRDBText и QRExpr. Более простым является использование компонентов QRDBText, каждый из которых отобража< т значение связанно­го с ним поля. Имя набора данга ix у казывается в свойстве DataSet. а имя поля задается в свойстве DataFileld. Для на) лядности схематично состав простого отчета и его связи с набором данных приведены на рис. 11.24.

Отчет

Полоса колонтитула

Полога заголовка

Полога заюлосков столбцов

QRLabpH

QPLabel2

QRLaheIN

DataSft

Набор данных (Table1)

DataSet

Полоса пблтсти данных

QRDBText! QRDBTcxt2 . QRHBTextN

Dataheid

Полиса итога отчета

Полоса нижнего колонтитула

Рис. 11.24. Состаз простого отчета и его связи с набором данных

На этапе разработки в отчете присутствует только одна полоса данных, но при формировании отчета отдельная полоса данных будет выведена для каж­дой записи отчета. Напомним, что если набор данных является пустым и не содержит записей, то область данных не выводится. Чтобы для пустого набора данных были выведены остал! ные полосы (кроме полос данных), свойству Р ntlfEmpty компонента Qi ii skRep устанавливается значение true (по умо лча- нию).

Компонент QRExpr. гозволяет вставлять в отчет значение выпаже пия, рас- счи гываемого обычно с участием различных полей записей. Выражение за­носится в свойство Expression типа String, для формирования которого удоб­

но использовагь окно Expression Wizard (Мастер выражений), вызываемое через Инспектор объектов.

j [ля вставки в выражение имени поля нужно нажат ь кнопку Database Field (Поле БД) и в открывшемся окне выбрать набор данных и имя поля.

В выражении можно использовать функции, которые разбиты по катего­риям и выбираются в специальном окне, вызываемом нажатием кнопки Function (Функция).

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

Чтобы протестировать введенное выражение, следует нажать кнопку Validate, при этом выполняется проверка выражения, а разработчику выдает­ся сообщение о корректности выражения или об ошибке.

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

При разработке приложения такие компоненты отчета, как QRIabel, QRDBText и QRExpr, имеют одинаковый внешний вид.

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

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

Колонтитулы печатаются в начале и конце каждой страницы, в них обыч­но выводя гея сведения о дате, времени печати, а также номер стр шицы. Для этого в полосах колонтитулов чаще всего размещаются компоненты QRSysData, которым устанавливается требуемое значение свойства Data.

В полосе колонтитула можно также разместить и другие компоненты, на­пример, QRLabel для выьида на каж дай странице названия организации.

Контрольные вопросы и задания

  1. Приведите схему взаимосвязей файла проекта при разработке приложе­

ния?

  1. Какие файлы входят в состав модуля формы и каково их назначение?

  2. Охарактеризуйте осноьные элементы, состав, шющие интерфейс систе­

мы С++ Builder.

  1. Каково назначение окон Инспектора объектов и Редактора кода?

  2. Какие элементы входя г в состав проекта?

  3. Что содержит файл представления формы?

  4. Каким образом определяется функциональность приложения9

  5. Разработайте обработчик события нажатия кнопки.

  6. В чем отличие действия команд Run, Make и Build?

  7. Охарактеризуйте процесс создания пользова гельского интерфейса при­ложения.

  8. Как создается обработчи i соОытия д дя компонен га?

  9. Какие механизмы доступа к данным поддерживаются в одно- и двуху ■ ровневых приложениях, разрабатываемых средп вамч системы С++ Builder?

  10. Охарактеризуйте таблицы, образующие базу данных.

1 i. Укажите различия в построении индексов в таблицах Paradox и dBase?

    1. Охарактеризуйте способы доступа к данным.

    2. Что предст авляет собой связывание таблиц и для чего оно организу ется?

    3. Изобразите схему связи между таблицами базы дачных Paradox.

    4. Охарактеризуйте формат таблиц dBase и Paradox.

19 Каково назначение инструментальных средств системы С+н Builder по работе с базами данных.

      1. Назовите основные страницы Палитры компонентов, на которых рас­положены компоненты, используемые при создании приложений для баз данных.

      2. Каково назначение компонентов, расположенных на с границе О Report?

      3. Какие классы исключений используются д ля операций, « вязанных с работой приложений для баз данных?

23 Какие события для обработки исключений имеются у набора данных Table?

        1. Каково назначение и возможности программы Database Desktop?

        2. Какие действия выполняются при определении структуры таблицы?

        3. Выполните создание таблицы с гюмощыо программы Database Desktop с назначением полей 5 различных типов.

        4. Каким образом назначается тип поля в таблице?

        5. Каким образом выполняется задание индекса в таблице?

        6. Выполните изменение индекса в имеющейся таблице.

        7. Назовите возможные варианты ограничений на значения полей.

        8. Поясните, в чем проявляется понятие ссылочной целостности.

32 Каким образом можно выполнить изменение структуры таблицы?

          1. Назовите компонен гы, используемые при создании приложения для базы данных.

          2. Для чего предназначен компонент DataSource?

35 Какую роль в приложении играет компонент DBGrid?

36. Какие действия в приложении д ля базы данных позволяет выполнять компонент DBNavigator?

            1. Изобразите схему, поясняющую взаимосвязь компонентов приложе­ния для базы данных и таблицы.

            2. Какие компоненты используются при подготовке отчета?

            3. Осуществляется связывание отчета с набором данных?

            4. Какие полосы могут входить в < остав отчета?

            5. Какие события генерируются при печати огчета?

            6. Укажите действия, выполняемые при создании простого отчета.

            7. Изобразите схему, поясняющую сос гав просто! о отчета и его взаимо­связи с набором данных.

Литература

              1. Программирование на С++- Учебное пособие/В. Г1. Аверкин, А. И. Бобровский,

В. В. Веснич, В. Ф. Радушинский, А. Д. Хомоненоко- Под ред. проф А. Д. Хо­моненко. - СПб.- КОРОПЛ принт, 2003

              1. Архангельский А. Я. Программирование в С+ + Buildei 6. — М.: ЗАО «Издатель­

ство БИНОМ», 2002