Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / мп44_45 / DB / БДлаб5-6.doc
Скачиваний:
28
Добавлен:
16.04.2013
Размер:
443.39 Кб
Скачать

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

Name

Caption

Default

Старое

Новое

Button1

buEdit

&Изменить сведения

False

Button2

buAppend

&Новая квартира

False

Button3

buExit

Выход

True

Таблица 6

Значения свойств компонентов, связанных с данными

Свойство

Table1

DataSource1

DBGrid1

DBNavigator1

Name

taFLAT

dsFLAT

grFLAT

naFLAT

DatabaseName

dbTUTOR

TableName

FLAT.DB

DataSet

taFLAT

DataSource

dsFLAT

dsFLAT

ReadOnly

True

VisibleButtons

[nbFirst, nbPrior, nbNext, nbLast]

Active

True

Для трех кнопок, помещенных в форму, следует задать процедуры обработки события OnClick: при нажатии кнопки Изменить сведения должна активизироваться форма fmEDITFLAT в режиме редактирования строки (записи), отмеченной в сетке треугольником; при нажатии кнопки Новая квартира должна активизироваться форма fmEDITFLAT в режиме ввода; при нажатии кнопки Выход форма fmSHOWFLAT должна деактивизироваться. Тексты процедур приведены на листинге 5.

Листинг 5. Процедуры обработки события OnClick для кнопок

procedure TfmSHOWFLAT.buEditClick(Sender: TObject);

begin

fmEDITFLAT.Editing :=True; {Режим редактирования}

fmEDITFLAT.KeyValue:= {Запомнить значение ключа}

taFLAT.FieldByName('Adr').AsString;

fmEDITFLAT.ShowModal; {Активизировать форму}

Synchronize;

end;

procedure TfmSHOWFLAT.buAppendClick(Sender: TObject);

begin

fmEDITFLAT.Editing:=False; {Режим ввода}

fmEDITFLAT.ShowModal; {Активизировать форму}

Synchronize;

end;

procedure TfmSHOWFLAT.buExitClick(Sender: TObject);

begin

fmSHOWFLAT.Close; {Деактивизировать форму}

end;

Чтобы признаки Editing и KeyValue стали доступными для установки, в начале раздела Implementation модуля записывается предложение

uses EDITFLAT;

Чтобы изменения в таблице taFLAT, сделанные при работе с формой fmEDITFLAT, синхронно отображались в форме fmSHOWFLAT, при возврате в нее в процедурах buEditClick и buAppendClick вызывается процедура Synchronize, показанная на листинге 6. Текст этой процедуры помещается в конце модуля перед словом end, а в разделе private класса TfmSHOWFLAT записывается заголовок процедуры

procedure Synchronize;

Листинг 6. Процедура синхронизации отображения информации в формах fmEDITFLAT и fmSHOWFLAT

procedure TfmSHOWFLAT.Synchronize;

begin

with taFLAT do

if fmEDITFLAT.KeyValue<>'' then

begin {Синхронизация отображения информации}

DisableControls;

First;

SetKey;

FieldByName('Adr').AsString :=

fmEDITFLAT.KeyValue;

GotoKey; {Поиск записи по ключу}

EnableControls;

end

else First;

end;

Для улучшения пользовательского интерфейса предусмотрим, чтобы при двойном щелчке на выбранной строке компонента grFLAT происходила активизация формы fmEDITFLAT в режиме редактирования, т.е. реакция была такой же, как при нажатии кнопки Изменение сведений. Нужную реакцию можно задать, если в форме fmSHOWFLAT выбрать компонент grFLAT, затем в инспекторе объектов на странице событий выбрать строку события OnDblClick, нажать в этой строке кнопку со стрелкой и из появившегося списка имен процедур обработки событий выбрать имя buEditClick.

Сохраним сделанные в проекте изменения командой File|Save Project, задав имя SHOWFLAT для файла с модулем формы fmSHOWFLAT, и перейдем в окно главной формы.

Для связи формы fmSHOWFLAT с главной формой нужно щелкнуть на пункте меню Квартиры и в окне текстового редактора набрать оператор

fmSHOWFLAT.ShowModal;

а предложение uses ABOUTSYS,EDITFLAT дополнить именем модуля SHOWFLAT.

Сохранив изменения командой File|Save Project, проверим работоспособность проекта, активизировав созданную форму из меню, а форму fmEDITFLAT - с помощью кнопок Изменение сведений, Новая квартира и двойным щелчком в строке сетки grFLAT. Убедившись, что все созданные формы взаимодействуют правильно, перейдем к доработке внешнего вида сетки, чтобы он соответствовал эскизу, показанному на рис.8.

С каждым компонентом Table ассоциируется набор полей, обозначаемый в системе Delphi термином DataSet (рис.10).

По умолчанию набор полей формируется динамически, когда таблица открывается установкой значения свойства Active=True, и очищается, когда закрывается при задании значения свойства Active=False. При динамическом формировании набора полей в него добавляются описания всех полей (атрибутов) для находящейся в базе данных на диске таблицы, которая связана с компонентом Table через значение свойства TableName. Описание поля - объект типа TField. Значения полей, описанных в DataSet, передаются визуальным компонентам приложения с помощью компонента DataSource, который связан c компонентом Table через значение свойства DataSet.

Информационная цепочка тянется следующим образом (см. рис.10): данные из таблицы БД на диске выбираются с помощью DataBase компонентом Table, который передает их компоненту DataSource отфильтрованными в соответствии с набором полей DataSet. DataSource передает данные любому визуальному компоненту, управляющему данными, который имеется в форме. Если пользователь сделает какие-нибудь изменения в данных с помощью визуальных управляющих компонентов, то DataSource передает эти изменения обратно компоненту Table, который с помощью DataBase помещает измененные данные в таблицу на диске.

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

Рис.10. Взаимодействие компонентов, связанных с данными

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

Чтобы сетка выглядела в соответствии с эскизом на рис.8, и категория квартиры выводилась в расшифрованном виде, необходимо набор полей для компонента taFLAT сформировать с помощью редактора полей; сформированный набор полей будет автоматически использоваться вместо динамически формируемого. Редактор полей позволяет добавлять или удалять поля, отображаемые в визуальных компонентах; задавать тип данных, хранящихся в полях; изменять порядок следования полей в DataSet, ассоциированном с компонентом Table; модифицировать свойства отдельных полей.

Чтобы для компонента taFLAT сформировать набор полей с нужными свойствами, необходимо:

1) вызвать редактор полей двойным щелчком на этом компоненте. В появившемся окне область Fields пуста, поскольку набор полей, формируемый динамически, не отображается в редакторе полей;

2) нажать правую кнопку мыши для вызова контекстного меню и выбрать из него команду Add all fields, чтобы добавить поля в область Fields. На экране снова появится окно с областью Fields, заполненной именами выбранных полей;

3) выбрать в контекстном меню команду New field, чтобы дополнить набор полей полем, в котором будет содержаться полное название категории квартиры. На экране появится окно New Field;

4) задать имя CategoryName для поля, в котором будет содержаться название категории квартиры, вычисляемое по коду, хранящемуся в поле KCategory. В графе Component автоматически сформируется имя компонента, соответствующего вычисляемому полю;

5) задать тип вычисляемого поля, выбрав из списка Type название String;

6) убедиться, что выбран расположенный в области Field type селектор Calculated;

7) нажать кнопку ОК. В появившемся окне редактора полей область Fields будет содержать имена полей, включенных в набор, и среди них - вычисляемое поле CategoryName;

8) поменять местами поля KCategory и CategoryName. Для этого нужно установит курсор мыши на поле KCategory и, удерживая нажатой левую кнопку мыши, перетащить это поле вниз на место, занимаемое полем CategoryName (этот пункт необязательный, предусмотрен для демонстрации возможности изменять порядок следования полей в наборе);

9) последовательно щелкнуть мышью на каждом поле в области Fields и в окне инспектора объектов установить значения свойств полей согласно табл.7;

10) закрыть окно редактора полей.

Таблица 7

Соседние файлы в папке DB