- •Проектирование и создание прикладной системы для работы с базой данных
- •Теоретические сведения Методика построения прикладной системы для работы с базой данных
- •Использование методики для выполнения учебного задания
- •Формы, обеспечиваюшие пользовательский интерфейс
- •Свойства пунктов главного и дополнительных меню
- •Свойства компонентов SpeedButton
- •Свойства компонентов, расположенных на форме fmEditflat
- •Значения свойств компонентов Button
- •Значения свойств компонентов, связанных с данными
- •Значения свойств полей для компонента taFlat
- •Значения свойств компонентов Table
- •Значения свойств компонентов DataSource
- •Значения свойств полей для компонента taHave_d
- •Значения общих cвойств визуальных компонентов
- •Лабораторное задание и порядок выполнения работы
- •Требования к отчету
- •Литература
- •Содержание
Значения свойств компонентов 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.
Взаимодействие компонентов, связанных
с данными
Чтобы сетка выглядела в соответствии с эскизом на рис.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