Основы проектирования реляционных баз данных

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

Рубрика Программирование, компьютеры и кибернетика
Вид курс лекций
Язык русский
Дата добавления 10.03.2015
Размер файла 569,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

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

Приведем только код процедуры TrafficRep, в которой выдается на экран диалоговая форма запроса параметров отчета, и выполняется SQL - запрос для выборки данных отчета:

procedure TrafficRep;

begin

fmTrafficQuery:=TfmTrafficQuery.Create (fmMain, 3);

with dmMain.qrTrafficRep do begin

//---запрашиваем параметры отчета

if fmTrafficQuery.ShowModal=mrCancel then Exit;

//---выполнение запроса

SQL.Clear;

if fmTrafficQuery.ckPhones.Checked then begin //---учет телефонов

SQL.Add ('select A.PhoneNum Телефон, A.DirectionId Код, B.Name Направление, ');

SQL.Add ('Sum (A.Duration) Длительность, Sum (A.Duration/60.0) Минуты, ');

SQL.Add ('Sum (A.Duration*B.Price/60) Стоимость ');

end

else begin

SQL.Add ('select A.DirectionId Код, B.Name Направление, ');

SQL.Add ('Sum (A.Duration) Длительность, Sum (A.Duration/60.0) Минуты, ');

SQL.Add ('Sum (A.Duration*B.Price/60) Стоимость ');

end;

SQL.Add ('from Traffic A, Directions B ');

SQL.Add ('where A.DirectionId=B.Id ');

if fmTrafficQuery.edPhoneNum.Text<>'' then begin

SQL.Add ('and A.PhoneNum like :cPhoneMask ');

ParamByName ('cPhoneMask').AsString:=fmTrafficQuery.edPhoneNum.Text;

end;

if fmTrafficQuery.cbDirections.Items.Strings [fmTrafficQuery. CbDirections .ItemIndex]<>''

then begin

SQL.Add ('and B.Id=:cDirectionId ');

ParamByName ('cDirectionId').AsString:=

Copy (fmTrafficQuery.cbDirections.Items.Strings [fmTrafficQuery.cbDirections. ItemIndex], 1,

Pos (' - ',

fmTrafficQuery.cbDirections.Items.Strings [fmTrafficQuery.cbDirections.ItemIndex])-1);

end;

if fmTrafficQuery.edMinDuration.Text<>'0' then begin

SQL.Add ('and A.Duration>=:iDurMin ');

ParamByName ('iDurMin').AsInteger:=StrToInt (fmTrafficQuery.edMinDuration.Text);

end;

if fmTrafficQuery.edMaxDuration.Text<>'0' then begin

SQL.Add ('and A.Duration<:iDurMax ');

ParamByName ('iDurMax').AsInteger:=StrToInt (fmTrafficQuery.edMaxDuration.Text);

end;

if fmTrafficQuery.ckPhones.Checked then

SQL.Add ('group by A.PhoneNum, A.DirectionId, B.Name ')

else SQL.Add ('group by A.DirectionId, B.Name ');

SQL.Add ('order by A.DirectionId');

Active:=True;

fmTrafficQuery.Free;

end;

if not Assigned (fmTrafficRep) then fmTrafficRep:=TfmTrafficRep.Create (fmMain);

fmTrafficRep.Show;

end;

В обработчике события OnCreate мы настраиваем внешний вид компонента gdTrafficRep:

procedure TfmTrafficRep.FormCreate(Sender: TObject);

var I: Integer;

begin

with dmMain.qrTrafficRep do

//---конфигурируем столбцы компонента gdTrafficRep

for I:=0 to FieldCount-1 do begin

gdTrafficRep.Columns.Add;

gdTrafficRep.Columns.Items [I].Title.Caption:=Fields.Fields [I].FieldName;

gdTrafficRep.Columns.Items [I].Title.Alignment:=taCenter;

gdTrafficRep.Columns.Items [I].Field:=Fields.Fields [I];

if Fields.Fields [I].DataType=ftFloat then

(Fields.Fields [I] as TFloatField).DisplayFormat:='######0.00';

end;

Лабораторная работа

Реализовать получение отчета при выборе соответствующего пункта меню с использование параметрического запроса. Отчет отобразить в дочерней MDI - форме.

6.10 Использование компонента TDBGrid

В предыдущем разделе мы писали код, реализующий настройку внешнего вида компонента TDBGrid. В данном разделе мы познакомимся более подробно с этим компонентом

Понятие столбцов

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

Свойство DataSource компонента TDBGrid содержит ссылку на экземпляр компонента TDataSource, который является посредником между TDBGrid и конкретным НД.

Для определения состава столбцов в TDBGrid можно использовать редактор столбцов (Columns Editor). Если редактор столбцов не использовался, берутся поля (компоненты TField), определенные с помощью редактора полей НД. При этом вид столбцов определяется соответствующими характеристиками компонентов TField.

Редактор столбцов TDBGrid

Вызвать редактор столбцов можно двойным щелчком мышки на компоненте TDBGrid, расположенного на форме. Для добавления столбца в редакторе необходимо щелкнуть по соответствующей кнопке панели инструментов редактора столбцов. При этом будет создан столбец, не связанный ни с каким полем НД. Чтобы поставить такому столбцу в соответствие какое-нибудь поле НД, следует в инспекторе объектов выбрать в свойстве FieldName необходимое поле.

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

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

Свойства столбцов устанавливаются в инспекторе объектов. Они определяют особенности отображения столбца в TDBGrid.

Управление свойствами TDBGrid во время выполнения приложения

Обратиться к конкретному столбцу компоента TDBGrid через его свойства можно как TDBGrid.Columns.Items [I], где I принадлежит диапазону [0.. TDBGrid.Count-1].

Свойство property Columns: TDBGridColumns; является набором столбцов TDBGrid. Приведем некоторые свойства и методы столбца (компонент TColumn):

property Alignment: TAlignment; - задает выравнивание;

property Color: TColor; - определяет цвет фона столбца:

property Field: TField; - ссылка на компонент TFiled, соответствующий данному столбцу;

property Title: TColumnTitle; - ссылка на заголовок столбца;

function Add: TColumn; - позволяет динамически добавлять столбцы в TDBGrid.

Используя эти свойства можно достаточно гибко управлять внешним видом компонента TDBGrid.

Управление отрисовкой ячеек во время выполнения приложения

Установки свойств полей НД и столбцов компонента TDBGrid позволяют управлять внешним видом всего столбца в целом. Но иногда возникает потребность в выделении каким-либо способом ячеек, которые имеют определенные значения полей. Например, отмечать красным цветом шрифта отрицательные суммы.

Способ отрисовки ячеек TDBGrid зависит от свойства DefaultDrawing. Если оно имеет значение False, то алгоритм отрисовки должен содержаться в обработчике события OnDrawColumnCell.

Для вывода ячеек стндартным способом используется метод DefaultDrawColumnCell.

Для нашего приложения реализуем механизм отрисовки для gdTrafficRep отчета по трафику с тем условием, что строки, в поле Duration которых значение превышает 150 секунд, выводить синим цветом. Код обработчика события OnDrawColumnCell выглядит следующим образом:

procedure TfmTrafficRep.gdTrafficRepDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

begin

if (dmMain.qrTrafficRep.FieldByName ('Длительность').AsInteger>150) and not

(gdSelected in State) then begin

gdTrafficRep.Canvas.Brush.Color:=clBlue;

gdTrafficRep.Canvas.Font.Color:=clWhite;

gdTrafficRep.Canvas.FillRect (Rect);

gdTrafficRep.Canvas.TextOut (Rect.left, Rect.Top, Column.Field.Text);

end

else gdTrafficRep.DefaultDrawColumnCell (Rect, DataCol, Column, State);

Лабораторная работа

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

6.11 Основные визуальные компоненты для работы с текущей записью

Общие положения. Краткое описание

Все компоненты, которые рассматриваются в этом разделе, подобны компонентам, которые были изучены на первой дисциплине данного курса (TEdit, TLabel, TListBox и т. д.). Поэтому подробно мы не будем останавливаться на описании изучаемых компонентов. Рассмотрим только основные отличия и особенности.

Компонент

«Родственный» компонент

Описание

TDBText

TLabel

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

TDBEdit

TEdit

Позволяет редактировать значение строкового поля

TDBCheckBox

TCheckBox

Позволяет «отметить» или «снять отметку» с логического поля в составе текущей записи НД

TDBListBox

TListBox

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

TDBComboBox

TComboBox

Действие компонента аналогично TDBListBox

TDBMemo

TMemo

Предназначен для показа и редактирования memo - полей

TDBLookupComboBox

Применяется для выбора значений в поле одного НД из списка значений, источником которого выступают значения какого-либо поля из другого НД. Оба НД связываются по полям связи, на которых реализуются связи «один ко многим» и «один к одному»

Перечень визуальных компонентов, предназначенных для работы с полями текущей записи НД

Т. к. данные компоненты предназначены для работы с полями текущей записи НД, то они имеют соответствующие свойства, с помощью которых осуществляется привязка к определенному полю НД. Существуют 2 таких свойства: property DataSource: TDataSource; - ссылка на источник данных, связанного с конкретным НД, и property DataField: string; - имя поля, связанного с данным визуальным компонентом.

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

Реализация возможности добавления, изменения и удаления записей в приложении «Учет трафика»

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

Режимы добавления, изменения и удаления записей НД будут активизироваться с помощью соответствующий пунктов меню «Действия» или кнопок панели инструментов.

В режимах добавления и редактирования на экран будет выдаваться диалоговое окно, в котором необходимо будет заполнить все поля, после чего нажать кнопку «Запомнить». Диалоговые окна будут наследоваться от компонента TfmDialog, разработанного нами ранее.

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

Сначала напишем обработчики событий выбора пунктов меню в главной форме приложения. Они все подобны за исключением вызова метода: Add - для добавления, Edit - для редактирования, Print - для печати, Delete - для удаления. Код обработчика выбора пункта меню «Действия»\ «Добавить»:

procedure TfmMain.mnAddClick(Sender: TObject);

begin

if Assigned (ActiveMDIChild) and (ActiveMDIChild is TfmMDIChild) then

ActiveMDIChild as TfmMDIChild).Add;

end;

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

Начнем с формы fmTraffic, работающей с таблицей БД Traffic. Диалоговое окно fmTrafficRecvs, наследуется от формы TfmDialog и имеет вид, представленный на рис. 3.11.2.

6.12 Основные визуальные компоненты для работы с текущей записью

Общие положения. Краткое описание

Все компоненты, которые рассматриваются в этом разделе, подобны компонентам, которые были изучены на первой дисциплине данного курса (TEdit, TLabel, TListBox и т. д.). Поэтому подробно мы не будем останавливаться на описании изучаемых компонентов. Рассмотрим только основные отличия и особенности.

Т. к. данные компоненты предназначены для работы с полями текущей записи НД, то они имеют соответствующие свойства, с помощью которых осуществляется привязка к определенному полю НД. Существуют 2 таких свойства: property DataSource: TDataSource; - ссылка на источник данных, связанного с конкретным НД, и property DataField: string; - имя поля, связанного с данным визуальным компонентом.

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

Компонент

«Родственный» компонент

Описание

TDBText

TLabel

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

TDBEdit

TEdit

Позволяет редактировать значение строкового поля

TDBCheckBox

TCheckBox

Позволяет «отметить» или «снять отметку» с логического поля в составе текущей записи НД

TDBListBox

TListBox

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

TDBComboBox

TComboBox

Действие компонента аналогично TDBListBox

TDBMemo

TMemo

Предназначен для показа и редактирования memo - полей

TDBLookupComboBox

Применяется для выбора значений в поле одного НД из списка значений, источником которого выступают значения какого-либо поля из другого НД. Оба НД связываются по полям связи, на которых реализуются связи «один ко многим» и «один к одному»

Перечень визуальных компонентов, предназначенных для работы с полями текущей записи НД

Реализация возможности добавления, изменения и удаления записей в приложении «Учет трафика»

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

Режимы добавления, изменения и удаления записей НД будут активизироваться с помощью соответствующий пунктов меню «Действия» или кнопок панели инструментов.

В режимах добавления и редактирования на экран будет выдаваться диалоговое окно, в котором необходимо будет заполнить все поля, после чего нажать кнопку «Запомнить». Диалоговые окна будут наследоваться от компонента TfmDialog, разработанного нами ранее.

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

Сначала напишем обработчики событий выбора пунктов меню в главной форме приложения. Они все подобны за исключением вызова метода: Add - для добавления, Edit - для редактирования, Print - для печати, Delete - для удаления. Код обработчика выбора пункта меню «Действия»\ «Добавить»:

procedure TfmMain.mnAddClick(Sender: TObject);

begin

if Assigned (ActiveMDIChild) and (ActiveMDIChild is TfmMDIChild) then

ActiveMDIChild as TfmMDIChild).Add;

end;

В обработчике проверяется наличие активной дочерней формы (свойство ActiveMDIChild) и, если такая имеется у нее вызывается метод Add, который наследуется у формы TfmMDIChild.

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

Начнем с формы fmTraffic, работающей с таблицей БД Traffic. Диалоговое окно fmTrafficRecvs, наследуется от формы TfmDialog и имеет вид, представленный.

Рис. Вид диалога fmTrafficRecvs

В этом окне используется 2 компонента TComboBox: cbClients и cbPhones, 1 компонент TDBLookupCombBox: cbDirections.

В cbClients пользователю предлагается выбрать клиента, по которому будет вводится или изменяться информация о разговоре. Заполнение cbClients, а также других компонентов, кроме cbPhones и cbDirections, осуществляется в обработчике события OnCreate модального окна, где по значению свойства EditStatus определяется режим, в котором вызвано данное окно - добавление новой записи (EditStatus=1) или изменение текущей (EditStatus=2):

procedure TfmTrafficRecvs.FormCreate(Sender: TObject);

var lOpen: Boolean;

begin

with dmMain do begin

//---дата разговора

if Self.Status=1 then begin

deCallDateTime.Date:=Date;

teCallDateTime.Time:=Time;

end

else begin

deCallDateTime.Date:=Trunc (tbTraffic.FieldByName ('CallDateTime').AsDateTime);

teCallDateTime.Time:=tbTraffic.FieldByName ('CallDateTime').AsDateTime-

Trunc (tbTraffic.FieldByName ('CallDateTime').AsDateTime);

end;

//---справочник клиентов

lOpen:=False;

if not tbClients.Active then begin

tbClients.Active:=True;

lOpen:=True;

end;

tbClients.First;

while not tbClients.EOF do begin

cbClients.Items.AddObject (tbClients.FieldByName ('Name').AsString,

TObject (tbClients.FieldByName ('Id').AsInteger));

if (Self.Status=2) and

(tbClients.FieldByName ('Id').AsInteger=

tbTraffic.FieldByName ('ClientId').AsInteger) then

cbClients.ItemIndex:=tbClients.RecNo-1;

tbClients.Next;

end;

if Self.Status=1 then cbClients.ItemIndex:=0;

cbClients.OnChange (Self);

if lOpen then tbClients.Active:=False;

//---Заголовок и режим изменения данных

if Self.Status=1 then begin

Self.Caption:='Добавление разговора';

tbTraffic.Append;

end

else begin

Self.Caption:='Изменение разговора';

tbTraffic.Edit;

end;

nd;

Также в этом обработчике, в зависимости от значения EditStatus, таблица tbTraffic переводится в состояние добавления или изменения записи.

Логика заполнения данными компонента cbPhones строится по другому. В данном компоненте должны отображаться телефоны клиента, выбранного в cbClients. Для этого реализован обработчик события cbClients.OnChange, который вызывается всякий раз, когда происходит изменение выбранного элемента в cbClients. Первый раз, в методе TfmTrafficRecvs.FormCreate, обработчик события OnChange вызывается напрямую. Код обработчика данного события приведен ниже:

procedure TfmTrafficRecvs.cbClientsChange(Sender: TObject);

var lOpen: Boolean;

begin

lOpen:=False;

cbPhones.Items.Clear;

with dmMain do begin

if not tbClients.Active then begin

tbClients.Active:=True;

lOpen:=True;

end;

qrTrafficRep.SQL.Clear;

qrTrafficRep.SQL.Add ('select PhoneNum from Phones where ClientId=:iClientId');

qrTrafficRep.ParamByName ('iClientId').AsInteger:=

Integer (cbClients.Items.Objects [cbClients.ItemIndex]);

qrTrafficRep.Active:=True;

while not qrTrafficRep.EOF do begin

cbPhones.Items.Add (qrTrafficRep.FieldByName ('PhoneNum').AsString);

qrTrafficRep.Next;

end;

cbPhones.ItemIndex:=0;

qrTrafficRep.Active:=False;

end;

Последнее, что заслуживает внимания, это обработчик нажатия на кнопку «ОК», в котором фиксируются изменения, сделанные в таблице. Здесь же предусмотрена обработка возможных исключений в случае нарушений ссылочной целостности или других ограничений БД при фиксации (блок «try except»):

procedure TfmTrafficRecvs.btOkClick(Sender: TObject);

begin

with dmMain.tbTraffic do begin

FieldByName ('ClientId').AsInteger:=

Integer (cbClients.Items.Objects [cbClients.ItemIndex]);

FieldByName ('PhoneNum').AsString:=cbPhones.Items.Strings [cbPhones.ItemIndex];

FieldByName ('CallDateTime').AsDateTime:=Trunc (deCallDateTime.Date)+

teCallDateTime.Time-Trunc (teCallDateTime.Time);

try

Post;

except

on E: Exception do begin

Application.MessageBox (PChar ('Произошла ошибка: '+E.Message), nil,

MB_OK or MB_ICONERROR);

Exit;

end;

ModalResult:=mrOk;

end;

В этом коде напрямую заносятся в поля таблицы значения только тех компонентов, которые не являются DB -компонентами: cbClients, deCallDateTime и т. д. DB - компоненты, такие как edDestination, cbDirections, заполняют поля таблицы значениями автоматически.

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

В завершении данного раздела приведем код для удаления записи из таблицы tbTraffic:

procedure TfmTraffic.Delete;

begin

with dmMain.tbTraffic do

if (RecordCount>0) and (Application.MessageBox (PChar ('Удалить раговор?'), 'Внимание',

MB_ICONQUESTION or MB_OKCANCEL)=idOK) then

try

Delete;

except

on E: Exception do begin

Application.MessageBox (PChar ('Произошла ошибка: '+E.Message), nil,

MB_OK or MB_ICONERROR);

Exit;

end;

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

Лабораторная работа

Реализовать функционал добавления, изменения и удаления записей в своих проектах.

6.13 Введение в построение отчетов

Обзор компонентов

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

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

Отчет сроится следующим образом. Сначала создается объект компонента TQuickRep, который инкапсулирует в себе поведение отчета. Затем на созданом отчете располагают экземпляры компонента TQRBand, которые используются для расположения на них отображаемых данных, заголовков , титульной и конечной информации. На отчете располагают столько таких компонентов, сколько секций отчета должно быть отображено, например: общий заголовок отчета, заголовок каждой страницы, область отображения записей отчета, область конечной информации отчета и т. д.

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

В качестве примера построения отчета рассмотрим отчет по трафику.

В этом отчете будет выводиться информация, которая получается при выборе пункта меню «Отчеты»\ «Отчет по трафику» нашего приложения.

Копирование данных: компонент TBatchMove

Начнем мы построение отчета с переноса информации из запроса (компонент qrTrafficRep) в фиксированную таблицу БД, которую назовем TrafficRep.db. Данной таблице соответствует экземпляр компонента TTable - tbTrafficRep.

Такой перенос информации позволяет просто и удобно делать компонент TBatchMove, располеженный на вкладке Data Access палитры компонентов. Чтобы осуществить перенос данных, расположим в модуле данных dmMain, экземпляр компонента TBatchMove - bmMain. Свойству Source данного компонента присвоим ссылку на наш запрос qrTrafficRep, а свойству Destination - ссылку на новую таблицу tbTrafficRep. Кроме того, необходимо правильно установить свойство Mode, которое определяет режим переноса информации. Мы это свойство установим в значение batCopy, которое определяет режим удаления предыдущих записей таблицы tbTrafficRep и занесения в пустую таблицу новых записей из qrTrafficRep.

Теперь, если вызвать метод bmMain.Execute , произойдет перенос данных из запроса в таблицу.

TQuickRep

Основным компонентом для построения отчета является TQuickRep, который определяет поведением отчета в целом. Для создания этого компонента в проекте необходимо выбрать пункт меню «File»\ «New» и в появившемся диалоге выбрать элемент «Report». При этом будет создана форма, на которой будет располагаться компонент TQuickRep. Установим свойство Name в значение rpTrafficRep, а свойству DataSet присвоим ссылку на таблицу tbTrafficRep, из которой будет выбираться информация для отображения в отчете.

Для настройки отчета необходимо дважды щелкнуть на отчете левой кнопкой мышки. При этом на экране отобразится диалог, позволяющий настроить отчет. Для нашего отчета мы настроим количество и состав компонентов TQRBand. В нашем отчете будут использоваться следующие секции: заголовок страницы (Page header), заголовок всего отчета (Title), непосредственно выводимые записи (Detail band) и конечная информация отчета (Summary). Кроме того, установим, что не надо выводить заголовок страницы на первой странице отчета.

После нажатия на кнопку «ОК» диалога, на отчете появятся экземпляры компонента TQRBand, соответствующие выбранным секциям отчета.

Рассмотрим наиболее полезные методы TQuickRep. Их два.

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

Второй - procedure Print - предназначен для вывода отчета на печать.

Кроме методов компонент TQuickRep имеет ряд очень полезных событий: property AfterPreview: TQRAfterPreviewEvent; наступает после закрытия окна предварительного просмотра; property AfterPrint: TQRAfterPrintEvent; наступает после вывода отчета на печать; property BeforePrint: TQRBeforePrintEvent; наступает в момент генерации отчета, до выдачи окна предварительного просмотра и до вывода отчета на печать.

TQRBand

После настройки вида отчета мы получили 4 экземпляра компонента TQRBand.

Компоненты TQRBand являются основными составными частями отчета и используются для размещения в них статического текста, рисунков и данных. Местоположения компонента в отчете и его поведение определяются свойством property BandType: TQRBandType. Это свойство может принимать следующие значения:

rbTitle - определяет компонент заголовка отчета.Этот вид компонента TQRBand используется для вывода заголовочной части отчета. В нашем отчете в этом компоненте будет располагаться название отчета, дата его формирования и заголовки столбцов

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

rbDetail - компонент детальной информации. Выводится всякий раз при переходе на новую запись в НД отчета. Отчет печатается для всех записей НД, который указан в свойстве DataSet отчета.

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

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

TQRLabel

Данный компонент позволяет выводить статический текст. В нашем отчете экземпляры этого компонента используются для отображения заголовков столбцов и заголовка всего отчета.

TQRDBText

Данный компонент используется в секции детальных данных для отображения значений полей текущей записи набора данных. В нашем отчете экземпляры данного компонента будут отображать поля таблицы tbTrafficRep.

TQRExp

Данный компонент позволяет вычислять выражения в отчете и отображать их результат. Выражения могут формироваться только на основе значений полей НД отчета.

TQRSysData

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

TQRImage

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

TQRShape

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

Построение простейшего отчета «Отчет по трафику»

Для генерации отчета в нашем приложении необходимо выбрать пункт меню «Действия»\ «Печать». Код обработчика приведен ниже:

procedure TfmTrafficRep.Print;

begin

//---перекачивание данных запроса в таблицу

dmMain.bmMain.Execute;

dmMain.tbTrafficRep.Active:=True;

//---отчет

rpTrafficRep:=TrpTrafficRep.Create (fmTrafficRep);

if lPhoneNum then begin

rpTrafficRep.lbPhoneNum1.Caption:='Телефон';

rpTrafficRep.lbPhoneNum2.Caption:='Телефон';

rpTrafficRep.edPhoneNum.DataSet:=dmMain.tbTrafficRep;

rpTrafficRep.edPhoneNum.DataField:='Телефон';

end;

rpTrafficRep.Preview;

//---завершающие операции

rpTrafficRep.Free;

rpTrafficRep:=nil;

dmMain.tbTrafficRep.Active:=False;

end;

Первым делом вызывается метод компонента TBatchMove Execute, который позволяет скопировать данные из запроса qrTrafficRep в таблицу TrafficRep.db. После этого создается отчет и настраиваются его столбцы с учетом используется ли № телефона в отчете.

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

Последнее, что мы сделаем, это выделим цветом те записи отчета, у которых продолжительность разговора больше 150 секунд. Для этого мы воспользуемся событием BeforePrint секции детальных данных. Код обработчика приведен ниже:

procedure TrpTrafficRep.DetailBand1BeforePrint(Sender:

TQRCustomBand;

var PrintBand: Boolean);

begin

if DataSet.FieldByName ('Длительность').AsInteger>150 then DetailBand1.Color:=clSilver

else DetailBand1.Color:=clWhite;

end;

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

Лабораторная работа

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

Литература

1. Атре Ш. Структурный подход к организации баз данных. - М.: Финансы и статистика, 1983. - 320 с.

2. Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем. - М.: Финансы и статистика, 1989. - 351 с.

3. Дейт К. Руководство по реляционной СУБД DB2. - М.: Финансы и статистика, 1988. - 320 с.

4. Джексон Г. Проектирование реляционных баз данных для использования с микроЭВМ. -М.: Мир, 1991. - 252 с.

5. Кириллов В.В. Структуризованный язык запросов (SQL). - СПб.: ИТМО, 1994. - 80 с.

6. Мартин Дж. Планирование развития автоматизированных систем. - М.: Финансы и статистика, 1984. - 196 с.

7. Мейер М. Теория реляционных баз данных. - М.: Мир, 1987. - 608 с.

8. Тиори Т., Фрай Дж. Проектирование структур баз данных. В 2 кн., - М.: Мир, 1985. Кн. 1. - 287 с.: Кн. 2. - 320 с.

9. Ульман Дж. Базы данных на Паскале. - М.: Машиностроение, 1990. - 386 с.

10. Хаббард Дж. Автоматизированное проектирование баз данных. - М.: Мир, 1984. - 294 с.

11. Цикритизис Д., Лоховски Ф. Модели данных. - М.: Финансы и статистика, 1985. - 344 с.

Размещено на Allbest.ru

...

Подобные документы

  • Анализ реляционных баз данных и способов манипулирования ими. Основные понятия баз данных, архитектура СУБД, модели данных. Модель сущность-связь, характеристика связей, классификация сущностей, структура первичных и внешних ключей, целостности данных.

    курсовая работа [166,6 K], добавлен 18.07.2012

  • Понятие информации, автоматизированных информационных систем и банка данных. Общая характеристика описательной модели предметной области, концептуальной модели и реляционной модели данных. Анализ принципов построения и этапы проектирования базы данных.

    курсовая работа [1,7 M], добавлен 18.01.2012

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

    курсовая работа [981,4 K], добавлен 05.11.2011

  • Этапы проектирования концептуальной модели базы данных: определение предметной области, каталогов задач, связей, первичных ключей. Математическое описание доменов и запросов в реляционной форме. Выбор технических средств и реализация программы.

    курсовая работа [2,2 M], добавлен 06.02.2010

  • Определенная логическая структура данных, которые хранятся в базе данных. Основные модели данных. Элементы реляционной модели данных. Пример использования внешних ключей. Основные требования, предъявляемые к отношениям реляционной модели данных.

    презентация [11,7 K], добавлен 14.10.2013

  • Анализ деятельности гостиницы. Структурный анализ бизнес-процесса на основе IDEF0-модели. Особенности построения инфологической и даталогической модели данных. Аспекты проектирования базы данных гостиницы с использованием программного языка Delphi.

    курсовая работа [1,6 M], добавлен 15.02.2014

  • Особенности управления информацией в экономике. Понятие и функции системы управления базами данных, использование стандартного реляционного языка запросов. Средства организации баз данных и работа с ними. Системы управления базами данных в экономике.

    контрольная работа [19,9 K], добавлен 16.11.2010

  • Структура, классификация и этапы проектирования баз данных. Системы управления базами данных, их жизненный цикл. Разработка и реализация базы данных в MS Access. Организация входных и выходных данных. Защита данных от внешних угроз. Сведение о программе.

    курсовая работа [558,6 K], добавлен 21.06.2012

  • Определение состава таблиц проектируемой реляционной базы данных, их полей и первичных ключей с использованием ER-метода логического проектирования БД. Особенности ER-метода для экономических приложений. Физическое проектирование БД в среде СУБД Access.

    курсовая работа [1,7 M], добавлен 14.02.2012

  • Базы данных с двумерными файлами и реляционные системы управления базами данных (СУБД). Создание базы данных и обработка запросов к ним с помощью СУБД. Основные типы баз данных. Базовые понятия реляционных баз данных. Фундаментальные свойства отношений.

    реферат [57,1 K], добавлен 20.12.2010

  • Этапы создания централизованных баз данных, создание инфологической и концептуальной модели. Основы проектирования реляционных БД. Таблица метаданных, установление связи между наименованием сущности и наименованием атрибутов; определение ключа атрибута.

    лабораторная работа [319,9 K], добавлен 15.12.2009

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

    контрольная работа [648,7 K], добавлен 13.04.2012

  • Основные концепции построения реляционных СУБД, базовые принципы проектирования данных. Базы данных: способы представления и модели. Цели построения инфологического моделирования. Разработка структуры программы. Даталогическая модель, разработка процедур.

    курсовая работа [1,7 M], добавлен 11.07.2012

  • Процесс проектирования базы данных на основе принципов нормализации. Применение инфологической модели на втором этапе проектирования. Семантика предметной области в модели базы данных. Оформление, выдача и обмен паспорта. Модель "сущность-связь".

    курсовая работа [67,9 K], добавлен 27.02.2009

  • Выбор методологии проектирования и системы управления базами данных. Описание предметной области и проектирование физической структуры базы данных. Реализация проекта в MS SQL Server 2008. Построение инфологической модели. Ограничения целостности связи.

    курсовая работа [679,2 K], добавлен 22.01.2013

  • Понятие и внутренняя структура, стадии и объекты процесса проектирования баз данных. Требования, предъявляемые к данному процессу. Ограниченность реляционной модели. Группы CASE-средств. Анализ предметной области: функциональный и объектный подходы.

    презентация [114,6 K], добавлен 19.08.2013

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

    курсовая работа [188,6 K], добавлен 15.07.2012

  • Основные понятия реляционной модели данных. Отношение атрибутов внутри модели. Контроль ссылочной целостности (анализ содержимого ключевых полей связанных таблиц). Нормализация отношений реляционной базы данных. Теоретико-множественные операции.

    реферат [69,8 K], добавлен 19.12.2011

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

    курсовая работа [1,3 M], добавлен 27.06.2013

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

    курсовая работа [743,7 K], добавлен 02.06.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.