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

Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009

.pdf
Скачиваний:
4972
Добавлен:
14.05.2016
Размер:
14.64 Mб
Скачать
F o r m 1.

/ I. Borland С++ Builder

423

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

Компоненты, предназначенные для создания отчетов, находятся на странице Q R e p o r t Палитры компонентов. Большинство компонентов отчета являются визуальными. Многие из них мало отличаются от аналогичных ком-

понентов страниц Standard, Additional и Data Controls. Например, компоненту

Q R I m a g e соответствуют компоненты I m a g e и D B I m a g e .

Главным элементом отчета является компонент-отчет Q u i c k R e p , представляющий собой основу, на которой размещаются другие компоненты. Компонент QuickRep обычно размещается на отдельной форме, предназначенной для создания отчета. По умолчанию он имеет имя Q u i c k R e p l . Если на форме размещается другой отчет (обычно так не делается), он получает имя

Q u i c k R e p 2 и т. д .

Компонент Q u i c k R e p при помещении его на форму имеет вид страницы формата А4, первоначально отображаемой в натуральную величину. При разработке приложения можно изменить масштаб страницы и размещенных на ней компонентов с помощью свойства Z o o m типа int. Значение этого свойства устанавливается в процентах, по умолчанию 100%.

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

Компонент Q u i c k R e p связывается с набором данных T a b l e или Q u e r y , для которого создается отчет, с помощью свойства D a t a S e t . При этом набор данных Q u e r y может содержать записи, выбранные из разных таблиц. При печати отчета в процессе выполнения приложения набор данных должен быть открыт. Во время построения отчета можно использовать специально создаваемый набор данных и размещать его на форме, при этом источник данных D a t a S o u r c e не требуется. На практике компонент Q u i c k R e p обычно связывается с набором данных, записи которого отображаются на форме в визуальных компонентах. В этом случае в отчет попадают записи, удовлетворяющие, например, критерию фильтрации и/или сортировки, задаваемому пользователем.

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

void fastcall TForm2::FormCreate(TObject *Sender)

{

QuickRep 1 ->DataSet=Form 1 ->Table 1;

}

Отчет Q u i c k R e p l , находящийся на форме F o r m 2 , при обработке события O n C r e a t e этой формы связывается с набором данных T a b l e 1, расположенным на форме F o r m l . В файле реализации (исходного кода) модуля формы F o r m 2 следует поместить директиву препроцессора #include «Unitl .h» для подключения заголовочного файла модуля формы

424

Часть 3. Современные СУБД и их применение

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

(\Г4 Form2

Н Н Е

книги по программированию

Авторы

Название

 

Издательство

 

ГОД

L

-1

L

J

L

J

L _l

JtotlioS

Title

E'ublishingJHoiise

Year

* • •*

L

_l

L

_i

L

_l

±о

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

Конструирование отчета в основном аналогично конструированию формы. Управлять наличием полос в отчете можно с помощью свойства B a n d s множественного типа T Q u i c k R e p B a n d s . При разработке приложения включение/отключение полосы выполняется установкой логического значения соответствующего подсвойства свойства B a n d s , например, для полосы области данных отчета этим подсвойством является H a s D e t a i l . С помощью этого свойства в простой отчет можно включать следующие полосы:

H a s P a g e H e a d e r — верхний колонтитул;

HasTitle — заголовок отчета;

HasColumnHeader — заголовки столбцов;

HasDetail — область данных;

H a s S u m m a r y — итог отчета;

H a s P a g e F o o t e r — нижний колонтитул.

Перечисленные полосы можно также вставлять в отчет с помощью компонента полосы Q R B a n d , при этом тип вставляемой полосы устанавливается через свойство B a n d T y p e этого компонента.

Параметры страницы отчета определяет свойство P a g e т и п а Т С Ж Р а д е , через подсвойства которого можно настраивать, например, следующие характеристики:

/ I. Borland С++ Builder

4 2 5

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

T o p M a r g i n , B o t t o m M a r g i n , L e f t M a r g i n и R i g h t M a r g i n — размер верхне-

 

го, нижнего, левого и правого нолей, соответственно.

Единицы измерения страниц, полос, полей, а также других элементов отчета определяет свойство U n i t типа T Q R U n i t s , принимающее, к примеру, следующие значения:

Inches — дюймы;

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

C h a r a c t e r s — автоматическая настройка в соответствии с размером символов, установленным свойством QuickRep->Font->Size.

При необходимости разработчик может изменить параметры страницы, а также многие другие параметры отчета (например, шрифт по умолчанию) с помощью Инспектора объектов или в диалоговом окне R e p o r t S e t t i n g ( У с т а -

н о в к и

о т ч е т а )

установки параметров отчета. Оно вызывается командой

R e p o r t

S e t t i n g

контекстного меню страницы отчета или двойным щелчком

на странице отчета.

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

F r a m e типа T Q R F r a m e .

С помощью свойства P r i n t e r S e t t i n g типа T Q u i c k R e p P r i n t e r S e t t i n g s уста-

навливаются параметры принтера, например: F i r s t P a g e и L a s t P a g e — номер первой и последней печатаемой страницы. Параметры принтера можно уста-

навливать также

с помощью стандартных диалогов P r i n t D i a l o g и

P r i n t e r S e t u p D i a l o g

или метода P r i n t e r S e t u p .

Отчет характеризуется тремя параметрами, которые задаются в свойстве

O p t i o n s множественного типа T Q u i c k R e p o r t O p t i o n s :

F i r s t P a g e H e a d e r — печать верхнего колонтитула на первой странице

 

отчета;

L a s t P a g e F o o t e r — печать нижнего колонтитула на последней странице

 

отчета;

C o m p r e s s i o n — отчет сохраняется в сжатом формате, при этом умень-

 

шается объем занимаемой памяти, но снижается быстродействие.

Свойство P r i n t l f E m p t y типа b o o l определяет, выводить ли данные отчета для пустого набора данных. По умолчанию свойство имеет значение t r u e , и отчет печатается, даже если в наборе данных пет ни одной записи. Это удобно, например, при печати бланков. Если свойству P r i n t l f E m p t y установить значение f a l s e , то для пустого набора данных отчет не выводится, точнее, выводится пустая страница. То есть при отсутствии записей отсутствует не только область данных, но и ряд других полос, например, заголовок отчета.

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

Для печати отчета предназначен метод Print, сразу после вызова которого отчет подготавливается к печати и направляется на установленный в системе

4 2 6 Часть 3. Современные СУБД и их применение

принтер. Дополнительных подтверждений от пользователя не требуется. При необходимости текущий принтер и его параметры устанавливаются до начала печати, например, с помощью вызова метода P r i n t e r S e t u p . Метод P r i n t может вызываться, например, при нажатии кнопки П е ч а т ь , расположенной на форме, с которой пользователь работает.

Если компонент-отчет Q u i c k R e p связан с набором данных, записи которого выводятся в сетке D B G r i d формы, то порядок записей отчета соответствует порядку записей, видимых пользователем на форме. После отбора (фильтрации) записей и/или сортировки при нажатии кнопки П е ч а т ь происходит вывод отчета, причем учитывается новый состав и порядок следования записей.

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

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

void fastcall TForml::Button2Click(TObject *Sender)

{

TBookmark bm;

bm=Tablel->GetBookmark(); / / Просмотр отчета

Form2->QuickRepl->Preview(); / / Печать отчета

Form2->QuickRepl->Print();

Tablel->GotoBookmark(bm) ;

Tablel->FreeBookmark(bm) ;

}

Закладка bm используется для запоминания и восстановления положе-

ния указателя текущей записи. В файле исходного кода модуля формы

F o r m l ,

из которой выполняется печать отчета, следует указать директиву

препро-

цессора # i n c l u d e " U n i t 2 . h " для подключения заголовочного файла

модуля

формы F o r m 2 , в которой размещен компонент отчета.

 

При печати отчета генерируются события B e f o r e P r i n t и A f t e r P r i n t типа T Q R B e f o r e P r i n t E v e n t . С помощью обработчика первого события можно задать действия, выполняемые непосредственно перед печатью отчета, а с помощью обработчика второго события — действия, выполняемые сразу после окончания печати.

В процессе выполнения приложения для предварительного просмотра отчета перед печатью служит метод P r e v i e w , вызывающий окно просмотра. В этом окне можно выполнить следующее: просмотреть отчет в различных

r b D e t a i l ,
Q R B a n d

/ I. Borland С++ Builder

4 2 7

масштабах; сохранить отчет в файле; загрузить предварительно сохраненный отчет; направить отчет в печать.

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

На этапе разработки приложения также можно просмотреть отчет, выполнив команду P r e v i e w (Просмотр) контекстного меню отчета. Внешний вид отчета будет таким же, как при печати или в окне просмотра при выполнении приложения, за исключением отсутствия значений вычисляемых полей.

Разработчик имеет возможность создать свое окно предварительного просмотра отчета, использовав компонент Q R P r e v i e w .

Полоса отчета (компонент Q R B a n d ) является основной составной частью (элементом) отчета, на которой размещаются другие его компоненты.

Тип полосы определяется свойством B a n d T y p e типа T Q R B a n d T y p e , которое может принимать, к примеру, следующие значения:

r b T i t l e — заголовок отчета (печатается в начале отчета под верхним ко-

 

лонтитулом);

r b P a g e H e a d e r — верхний колонтитул, который печатается сверху на каж-

 

дой странице, в том числе на первой, если включен (по умолчанию) пара-

 

метр F i r s t P a g e F o o t e r свойства O p t i o n s компонента отчета; если этот па-

 

раметр выключен, то верхний колонтитул на первом листе не печатается;

r b D e t a i l — данные записей набора данных; выводятся для каждой запи-

 

си набора данных;

r b C h i l d — дочерняя полоса, печатаемая после полосы, с которой она свя-

 

зана.

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

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

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

свойству BandType;

установить значение true соответствующему подсвойству свойства B a n d s компонента Q u i c k R e p , при этом к отчету добавляется полоса, а ее свойству B a n d T y p e автоматически устанавливается нужное значение.

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

4 2 8 Часть 3. Современные СУБД и их применение

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

В процессе выполнения приложения при вызове метода P r e v i e w также генерируются события B e f o r e P r i n t и A f t e r P r i n t .

После создания полосы определенного типа в ней размещаются соответствующие компоненты, при этом необходимо использовать только компоненты страницы Q R e p o r t . Размещение на полосе других компонентов, например, L a b e l или Edit, не вызывает ошибки трансляции, но в сформированный отчет такие компоненты не попадают.

Можно разместить компонент отчета и вне полосы — непосредственно на ком- поненте-отчете Q u i c k R e p . В этом случае он будет выводиться на каждой странице отчета (например, компонент Q R I m a g e , содержащий логотип фирмы).

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

Q R L a b e l — надпись, содержащая текст (аналог надписи L a b e l ) , которая

 

может размещаться на любой полосе, но для полос данных обычно не

 

используется;

Q R D B T e x t — значение поля записи (аналог компонента D B T e x t ) ; обыч-

 

но размещается в полосе данных;

Q R E x p r — значение, формируемое на основе выражения, в котором мо-

 

гут использоваться значения полей записей; обычно используется для

 

полос данных и нижних колонтитулов;

QRSysData — системная информация, обычно используемая для ито-

 

говых полос и полос колонтитулов; ее вид определяется свойством D a t a

 

типа T Q R S y s D a t a T y p e , принимающим, к примеру, значения:

 

q r s C o l u m n N o — помер текущего столбца (для одноколоночного от-

 

 

чета равен единице);

 

q r s D a t e T i m e — текущие дата и время;

QRImage — графический образ, загружаемый аналогично графическо-

 

му образу Image (может быть использован в любой полосе, но обычно

 

не размещается в полосах данных); с помощью компонента Q R I m a g e

 

выводится, например, логотип организации; кроме того, следует отли-

 

чать этот компонент и от компонента Q R D B I m a g e , который обычно раз-

 

мещается в полосе данных и отображает рисунок из поля таблицы;

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

Перед компонентом Q R S y s D a t a может находиться надпись, которая указывается в свойстве Text типа A n s i S t r i n g . По умолчанию надпись отсутствует.

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

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

Table .

/ I. Borland С++ Builder

4 2 9

бражаемых в сетке D B G r i d . Отличием является то, что данные отчета размещаются не на форме, а на бумажном документе, и их нельзя редактировать.

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

разместить на форме компонент Q u i c k R e p ;

создать для компонента Q u i c k R e p требуемые полосы отчета;

разместить в полосах нужные компоненты отчета, чаще всего Q R L a b e l ,

 

Q R D B T e x t и Q R E x p r ;

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

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

Размещение на форме компонента отчета, установка параметров отчета, а также создание обработчика события нажатия кнопки печати рассмотрено при описании компонента Q u i c k R e p выше.

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

верхний колонтитул ( r b P a g e H e a d e r ) ;

заголовок отчета ( r b T i t l e ) ;

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

данные ( r b D e t a i l ) ;

итог отчета ( r b S u m m a r y ) ;

• нижний колонтитул ( r b P a g e F o o t e r ) .

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

Можно добавить к проекту шаблон простого отчета, вызвав командой меню

F i l e / N e w / O t h e r . . .

( Ф а й л / Н о в ы й / Д р у г о й ) Хранилище объектов и выбрав на

странице F o r m s

( Ф о р м ы ) объект Q u i c k R e p o r t List ( Л и с т о т ч е т а ) . Шаблон

этого отчета содержит полосы заголовка отчета, заголовков столбцов и данных, нижний колонтитул и расположен на отдельной форме Q R L i s t F o r m . На форме отчета также расположен набор данных

Заголовок отчета выводится один раз на первой странице сразу под верхним колонтитулом, если он есть. В полосе заголовка обычно размещаются надписи Q R L a b e l , содержащие требуемый текст (как правило, в качестве заголовка выводится название всего отчета). При необходимости в заголовке можно разместить, например, сведения о названии, адресе и телефоне организации, а также логотип. В приведенном на рис. 11.23 примере в полосе заголовка находятся название отчета. Для вывода названия отчета используется компонент Q R I a b e l , в котором набран текст К н и г и п о п р о г р а м м и -

р о в а н и ю .

430

Часть 3. Современные СУБД и их применение

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

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

Для вывода значений полей записей в полосу данных обычно помещаются компоненты Q R D B T e x t и QRExpr . Более простым является использование компонентов QRDBText, каждый из которых отображает значение связанного с ним поля. Имя набора данных указывается в свойстве DataSet, а имя поля задается в свойстве DataFileld. Для наглядности схематично состав простого отчета и его связи с набором данных приведены на рис. 11.24.

Отчет

 

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

 

 

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

 

 

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

 

QRLabeM

QRLabel2

QRLabeIN

 

 

 

DataSet

 

 

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

Набор данных

 

 

DataSet

QRDBTeKtl

QRDBText2

.. . QRDBTextN

(Table!)

 

DataField

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

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

На этапе разработки в отчете присутствует только одна полоса данных, но при формировании отчета отдельная полоса данных будет выведена для каждой записи отчета. Напомним, что если набор данных является пустым и не содержит записей, то область данных не выводится. Чтобы для пустого набора данных были выведены остальные полосы (кроме полос данных), свойству PrintlfEmpty компонента Q u i c k R e p устанавливается значение true (по умолчанию).

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

Q R I a b e l ,

/ I. Borland С++ Builder

431

но использовать окно E x p r e s s i o n W i z a r d ( М а с т е р в ы р а ж е н и й ) ,

вызываемое

через Инспектор объектов.

 

Для вставки в выражение имени поля нужно нажать кнопку D a t a b a s e Field (Поле БД) и в открывшемся окне выбрать набор данных и имя поля.

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

F u n c t i o n ( Ф у н к ц и я ) .

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

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

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

При разработке приложения такие компоненты отчета, как Q R D B T e x t и Q R E x p r , имеют одинаковый внешний вид.

Итоговая полоса отчета выводится один раз в конце отчета сразу после полосы данных. В этой полосе обычно стоят либо итоговые сведения отчета, например, средние и максимальные значения по данным какого-либо поля, либо должность и фамилия лица, утверждающего отчет. В итоговой полосе обычно размещаются компоненты Q R I a b e l для вывода надписей и Q R E x p r для вывода значений выражений.

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

Колонтитулы печатаются в начале и конце каждой страницы, в них обычно выводятся сведения о дате, времени печати, а также номер страницы. Для этого в полосах колонтитулов чаще всего размещаются компоненты Q R S y s D a t a , которым устанавливается требуемое значение свойства D a t a .

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

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

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

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

3.Охарактеризуйте основные элементы, составляющие интерфейс системы С++ Builder.

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

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

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

432

Часть 3. Современные СУБД и их применение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

21.Каково назначение компонентов, расположенных на странице QReport?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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