Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_Razrabotki_po_labam / БДлаб6.doc
Скачиваний:
7
Добавлен:
05.06.2015
Размер:
518.66 Кб
Скачать

Свойства компонентов, расположенных на форме fmEditflat и в модуле данных

Name

Caption

Name

Старое

Новое

Старое

Новое

Label1

laAddress

Адрес

DBEdit1

deAddress

Label2

laSkv

Площадь квартиры

DBEdit2

deSkv

Label3

laNrooms

Число комнат

DBEdit3

deNrooms

Label4

laKCategory

Категория квартиры

DBComboBox1

dcKCategory

Label5

laKvm

Кв.м.

Table1

taFLAT

Button1

buExit

Выход

DataSource1

dsFLAT

Button2

buCancel

Отмена

DBNavigator1

naFLAT

Name

DatabaseName

Table Name

DataSet

Data Source

DataField

Visible Buttons

taFLAT

dbTUTOR

FLAT.DB

dsFLAT

taFLAT

naFLAT

dsFLAT

nbFirst, nbPrior, nbNext, nbLast

deAddress

dsFLAT

Address

deSkv

dsFLAT

Skv

deNrooms

dsFLAT

NRooms

dcKCategory

dsFLAT

KCategory

Для компонента taFLAT последним устанавливается значение свойства Active=True.

Для кнопки Выход установим значение свойства Default=True, чтобы она реагировала на нажатие клавиши Enter.

Компонент dcKCategory позволяет задавать значение поля (атрибута) KCategory нажатием на клавиатуре клавиш со стрелками или выбором одного из допустимых значений, предусмотренных в списке, который появляется при нажатии на кнопку со стрелкой. Список допустимых значений определяется свойством Items этого компонента. Для создания или проверки списка нужно дважды щелкнуть на свойстве Items, чтобы появилось окно String List Editor, в котором набираются строки, содержащие допустимые значения поля KCategory: П, Н, К.

Форма fmEDITFLAT используется как в режиме ввода, так и в режиме редактирования. Для задания режима необходимо предусмотреть признак Editing, объявив его как поле Boolean Editing в разделе public класса TfmEDITFLAT в файле EDITFLAT.h. Editing=True, если форма используется в режиме редактирования; Editing=False, если форма используется в режиме ввода. Этот признак должен устанавливаться перед активацией формы.

При активизации формы происходит событие OnActivate, процедура обработки которого должна анализировать признак Editing и настраивать форму на заданный режим работы. Текст этой процедуры приведен на листинге 2.

Листинг 2. Процедура обработки события OnActivate

void __fastcall TfmEDITFLAT::FormActivate(TObject *Sender)

{

if (Editing)

{

Caption = "Изменение сведений о квартире";

naFLAT->Show(); // Навигатор виден

dmPERSPROF->taFLAT->Edit(); // Режим редактирования

}

else

{

Caption = "Регистрация сведений о квартире";

naFLAT->Hide(); // Навигатор не виден

dmPERSPROF->taFLAT->Append(); // Режим дополнения

};

}

Для кнопок Выход и Отмена следует задать процедуры обработки события OnClick. Переход в окно текстового редактора для ввода текста процедур осуществляется двойным щелчком на кнопке Выход или Отмена. Текст процедур показан на листинге 3.

Листинг 3. Процедуры обработки событий OnClick для кнопок Выход и Отмена

void __fastcall TfmEDITFLAT::buExitClick(TObject *Sender)

{

if (((dmPERSPROF->taFLAT->State==dsEdit)||(dmPERSPROF->taFLAT->State==dsInsert))

&& dmPERSPROF->taFLAT->Modified)

dmPERSPROF->taFLAT->Post();//Сохранить изменения, если действует режим

//редактирования/добавления и строка изменялась

fmEDITFLAT->Close();

}

void __fastcall TfmEDITFLAT::buCancelClick(TObject *Sender)

{

dmPERSPROF->taFLAT->Cancel(); //Отменить изменения

fmEDITFLAT->Close();

}

На этом создание формы fmEDITFLAT завершается. Остается связать ее с пунктом меню Квартира в главной форме и кнопкой на панели быстрого доступа.

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

Для связи формы fmEDITFLAT с главной формой нужно, работая в конструкторе меню, дважды щелкнуть на пункте меню Квартира и в окне активизированном текстового редактора набрать два оператора, показанные на листинге 4. Кроме этого необходимо подключить модуль формы fmEDITFLAT к главной форме приложения, выбрав команду File | Use Unit и указав файл модуля EDITFLAT в окне Use Unit.

Листинг 4. Процедура активизации формы fmEDITFLAT в режиме ввода

void __fastcall TfmMAINFORM::mmEditFlatClick (TObject *Sender)

{

fmEDITFLAT->Editing = False; // Задать режим ввода

fmEDITFLAT->ShowModal(); // Активизировать форму

}

Эти же операторы должны выполняться при нажатии кнопки sbNewFlat, поэтому в качестве процедуры обработки события OnClick для этой кнопки зададим процедуру mmEditFlatClick, приведенную на листинге 4. Для этого нужно в главной форме щелкнуть на строке события OnClick, щелчком на кнопке со стрелкой вызвать список имен процедур обработки событий и выбрать имя mmEditFlatClick.

Сохранив изменения командой File | Save All, можно проверить работоспособность проекта, осуществив активизацию созданной формы из меню или кнопкой на панели быстрого доступа и убедившись в правильном функционировании формы fmEDITFLAT.

Аналогичным способом создаются две другие формы типа ввод/редактирование: fmEDITPHON и fmEDITPROF.

Создание формы fmSHOWFLAT. Выберем команду File | New | Form, чтобы включить в проект пустую форму.

Поместим в эту форму три компонента TButton и по одному компоненту TDBGrid и TDBNavigator, расположив их так, как показано на рис.8. Подключим модуль данных dmPERSPROF к создаваемой форме, выбрав команду File | Use Unit и указав файл модуля данных DATAMOD в окне Use Unit.

Зададим для формы значения свойств Name=fmSHOWFLAT, Caption=Сведения о квартирах. Значения свойств других компонентов установим в соответствии с табл.5 и 6.

Таблица 5

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

Name

Caption

Default

Старое

Новое

Button1

buEdit

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

False

Button2

buAppend

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

False

Button3

buExit

Выход

True

Таблица 6

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

Свойство

DBGrid1

DBNavigator1

Name

grFLAT

naFLAT

DataSource

dsFLAT

dsFLAT

ReadOnly

True

VisibleButtons

[nbFirst, nbPrior, nbNext, nbLast]

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

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

void __fastcall TfmSHOWFLAT::buEditClick(TObject *Sender)

{

fmEDITFLAT->Editing = True; // Режим редактирования

fmEDITFLAT->ShowModal(); // Активизировать форму

}

void __fastcall TfmSHOWFLAT::buAppendClick(TObject *Sender)

{

fmEDITFLAT->Editing = False; // Режим ввода

fmEDITFLAT->ShowModal(); // Активизировать форму

}

void __fastcall TfmSHOWFLAT::buExitClick(TObject *Sender)

{

fmSHOWFLAT->Close(); // Деактивизировать форму

}

Чтобы признак Editing стал доступным для установки, необходимо подключить модуль формы fmEDITFLAT к форме fmSHOWFLAT, выбрав команду File | Use Unit и указав файл модуля EDITFLAT в окне Use Unit.

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

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

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

fmSHOWFLAT->ShowModal();

Кроме этого необходимо подключить модуль формы fmSHOWFLAT к главной форме приложения, выбрав команду File | Use Unit и указав файл модуля SHOWFLAT в окне Use Unit.

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

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

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

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

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

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

Ч

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

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

1) используя команды View | Forms и View | Toggle Form/Unit или клавиши Shift+F12 и F12, перейти в модуль данных dmPERSPROF и вызвать редактор полей двойным щелчком на компоненте taFLAT. В появившемся окне с заголовком dmPERSPROF->taFLAT область Fields пуста, поскольку набор полей, формируемый динамически, не отображается в редакторе полей;

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

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

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

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

Таблица 7

Значения свойств полей для компонента taFLAT

Имя поля

DisplayLabel

Visible

Adr

Адрес

True

Skv

Площадь

True

KCategory

KCategory

False

NRooms

Комнат

True

В результате заголовок сетки будет содержать названия колонок на русском языке (свойство DisplayLabel), колонка со значениями поля KCategory отображаться не будет (Visible=False).

Теперь создание формы fmSHOWFLAT полностью завершено, и следует сохранить проект командой File | Save All и еще раз проверить работоспособность приложения.

Аналогичным способом создаются три другие формы типа сетка: fmSHOWPHON, fmSHOWPROF, fmSHOWPERS.

Создание формы fmEDITPERS. Поместим в модуль данных dmPERSPROF четыре компонентов TTable и четыре компонента TDataSource. Свойства компонентов TTable и TDataSource устанавливаются в соответствии с табл.8 и 9.

Таблица 8

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