Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.doc
Скачиваний:
10
Добавлен:
12.02.2016
Размер:
21.98 Mб
Скачать

Самостоятельное задание

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

Заключительный вид документа

1. Для компонента Button1 заменим у свойству Captionнадпись Button1 на Отчет.

2. Для компонента QuickRep1 установим в активное состояние полосу Titleпосредством свойства Bends.HasTitle:=true.

3. Поместим в полосу TitleкомпонентQRLabel1 и свойствуAlignmentзададим значениеtaCenter(размещение по центру).

4. В обработчике события кнопки Button1 допишем следующие строки программы:

procedure TForm1.Button1Click(Sender: TObject);

begin

QRLabel1.Caption:= 'Список факультетов и специальностей';

ClientDataSet1.IndexFieldNames :='F_Name'; //сортировка в Master отношений

ClientDataSet2.IndexFieldNames :='CF_Code; GR_Name'; //сортировка в Detail отношений

ClientDataSet1.Open; //активизация компонента (доступ к данным)

ClientDataSet2.Open; //активизация компонента (доступ к данным)

QuickRep1.Preview; //вывод документа

end;

5. Выставим размер и жирный для компонент QRLabel1, свойствуFont->Size14,Style->fsBoldиfsItalicзначениеTrue.

6. Выставим жирный и подчеркнутый для компонент QRDBText1, свойству Font ->Style-> fsBold := True (жирный) и Frame ->DrawBottom := True (подчеркнутый) .

7. Коночный вариант работы представлен ниже с соответствующим программным кодом:

Форма готового проекта

Программный код:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, QuickRpt, QRCtrls, DB, DBClient, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Panel1: TPanel;

QuickRep1: TQuickRep;

Button1: TButton;

ClientDataSet1: TClientDataSet;

ClientDataSet2: TClientDataSet;

DataSource1: TDataSource;

DetailBand1: TQRBand;

QRDBText1: TQRDBText;

QRSubDetail1: TQRSubDetail;

QRDBText2: TQRDBText;

TitleBand1: TQRBand;

QRLabel1: TQRLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

QRLabel1.Caption := 'Список факультетов и специальностей';

ClientDataSet1.IndexFieldNames :='F_Name'; //сортировка в Master отношений

ClientDataSet2.IndexFieldNames :='CF_Code; GR_Name'; //сортировка в Detail отношений

ClientDataSet1.Open; //активизация компонента (доступ к данным)

ClientDataSet2.Open; //активизация компонента (доступ к данным)

QuickRep1.Preview; //вывод документа

end;

end.

Отчет выводимый при нажатии на кнопку «Отчет».

Домашнее задание 2 Объектная модель документа, реализованная на tClientDataSet

  1. Создаем стандартное приложение Delphiи сохраняем проект.

  2. Установим в форму компонент ClientDataSet1.

  3. Выберем свойство FieldDefsкомпонентаClientDataSet1(рис. 2).

Рис. 2 Выбор свойства FieldDefs

  1. Вызоваем редактор определителя полей (рис. 3), выполнив щелчок мышкой по кнопке, расположенной справа от свойства FieldDefs(рис. 1).

Рис. 3 Вид редактора полей свойства FieldDefs

  1. Добавляем первое поле главного представления таблицы, выполнив команду Add New (Ins)в редакторе определителя полей.

  2. Измените в инспекторе объектов имя поля DataSet1Field1наFacultet , в свойствеData Typeвыбераем значениеftStringи в свойствеSizeукажите размер =25 (рис. 4 а, б).

Рис 4 а, б Изменение значений свойств в инспекторе объектов

  1. Добавляем второе поле главного представления таблицы, выполнив команду Add New (Ins)в редакторе полей. Данное поле будет являться полем связи с подчиненным представлением таблицы (Nestedполем), поэтому в инспекторе объектов переименуйте его вLinkи выберите значениеfkDataSetв свойствеData Type (рис. 5).

Рис 5 Установка значений свойств поля Link

  1. Для поля Linkвызовим редактор вложенных полей, выполняем щелчок мышкой по кнопке свойстваChildDefsв инспекторе объектов (рис. 6).

Рис. 6 Вид редактора полей свойства FieldDefs и ChildDefs

  1. В редакторе дочерних полей добавляем первое поле вложенного представления таблицы, выполнив команду Add New(Ins) (рис. 7).

Рис. 7 Вид редактора полей свойства FieldDefs и ChildDefs после создания поля

  1. Изменим в инспекторе объектов имя поля LinkField1наGroup , в свойствеData Typeвыберем значениеftStringи в свойствеSizeукажите размер =12 (рис. 8 а, б).

Рис 8 а, б Изменение значений свойств в инспекторе объектов

  1. После описания структуры документа создаем DataSet для компонентаClientDataSet. Напомним, что для созданияDataSetнеобходимо выбрать в форме компонентClientDataSet1и затем выполнить командуCreate Data Setконтекстного меню.

  2. Для передачи данных другим DataSetнеобходимо в редактор полей добавим поля все поля главного представления. Для этого достаточно выполнить двойной щелчок мышкой по компонентуClientDataSet1и затем выполнить командуAddAll Fieldsконтекстного меню.

  3. После создания DataSetсохраните созданную структуру вXMLпакетном файле с именемDocument, выполнив команду контекстного менюSave To Base XML table.

  4. Для того, что бы компонент ClientDataSet1был связан с файлом документа необходимо подключить к нему созданный файл посредством свойстваFileName.

  5. Для отображения вложенных свойств созданного объекта необходимо установить в форму второй компонент ClientDataSet2, который необходимо связать с компонентомClientDataSet1выбрав в свойствеDataSetFieldкомпонентаClientDataSet2значениеClientDataSet1Link.

  6. После выполнения выше указанного действия необходимо добавить вложенные поля документа в ClientDataSet2, выполнив действия аналогичные описанным в пункте 12.

  7. Представление данных в элементах управления выполняется аналогично представлению данных в базах данных. Для представления данных достаточно установить в форму компоненты связи DataSource1иDataSource2, которые соответственно связать с компонентамиClientDataSet1иClientDataSet2посредством свойстваDataSet. Далее установить в форму компонентыDBGrid1иDBGrid2, которые соответственно связать сDataSource1иDataSource2посредством свойстваDataSet.Для выполнения команд “Записать”, “Удалить”, “Переместить” и других достаточно установить в форму компоненты – навигаторы (DBNavigator1иDBNavigator2) которые связать соответственно с компонентамиDataSource1иDataSource2.

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

procedure TForm1.RD;

var

temp : string;

begin

temp := ClientDataSet1Facultet.Value;

ClientDataSet1.Edit;

ClientDataSet1Facultet.Value := '***';

ClientDataSet1.Post;

ClientDataSet1.Edit;

ClientDataSet1Facultet.Value := temp;

ClientDataSet1.Post;

end;

который продекларировать в одном из разделов объявлений:

private

{ Private declarations }

procedure RD;

  1. Для обеспечения корректной работы приложения управления документом вышеуказанный метод необходимо вызывать в обработчиках событий AfterDelete иAfterPostкомпонентаClientDataSet2.

procedureTForm1.ClientDataSet2AfterDelete(DataSet: TDataSet);

begin

RD;

end;

procedureTForm1.ClientDataSet2AfterPost(DataSet: TDataSet);

begin

RD;

end;

Рис. 9 Конечный вид разрабатываемого приложения