Приложения для работы с локальными базами данных_______________537

Tablel->Active = true;

Tabiel->First() ;

CBdep->Clear() ;

while (!Tablel->Eof)
{

CBdep->Items->Add(TablelDep->AsString) ;

Tablel->Next() ;

)
CBdep->Items->Add("все отделы") ;

CBEDep->ItemIndex = 0;

Tablel->First();

Этот код активизирует набор данных, устанавливает его курсор на первую за-
пись, очищает список CBDep, а затем в цикле заносит в список все значения поля
Dep из набора данных Tablel. Затем в список добавляется строка «все отделы»,
чтобы можно было в дальнейшем просматривать список сразу по всем отделам. По-
сле этого индекс списка устанавливается на первую строку, а курсор набора дан-
ных устанавливается на первую запись.

В качестве окна редактирования «тип подразделения», отражающего характер
подразделения, можно взять компонент класса TDBEdit, настроенный на поле
Proisv. Для этого компонента надо построить свою цепочку из источника данных и
набора данных DataSource3 и ТаЫеЗ, настроенную на ту же таблицу Dep. При пе-
ремещении по набору данных с помощью CBDep текст в этом компоненте будет ав-
томатически изменяется.

Ниже рассмотренных окон расположен компонент Tpers класса TDBGrid, свя-
занный с цепочкой из источника данных и набора данных DataSource2 и Table2,
настроенной на таблицу Pers. Это вспомогательная таблица, связанная с головной
таблицей Tablel. Поэтому в Table2 установлены свойства MasterSource = DataSo-
urcel и MasterFields = Dep.

Поскольку в списке CBDep имеется строка «все отделы», при выборе которой
надо разрывать связь между таблицами, то в обработчик события OnChange ком-
понента CBDep вставлен код:

if (CBdep->ItemIndex == CBdep->Items->Count-l)
f

Table2->MasterFields = "";

Table2->IndexFieldNames = "Fam;Nam;Par";

)

else

. 1

Table2->MasterFields = "Dep";

Table2->IndexFieldNames = "Dep;Fam;Nam;Par";

}
TPers->SetFocus() ;

Если в списке выбрана последняя строка («все отделы»), связь таблиц разры-
вается заданием пустого значения свойства MasterFields и таблица Table2 индек-
сируется по алфавиту сотрудников. Последний оператор обработчика передает фо-
кус компоненту Tpers. Этот оператор необходим, так как без него не будет видно
изменение в Tpers сразу после изменения в списке CBDep.

Индикатор Подразделение в приложение введен для контроля правильности ра-
боты и для возможности отображения подразделений, в которых работают сотрудни-
ки, в режиме все отделы. Обработчик события OnClick этого компонента имеет вид:

Table2Dep->Visible = CheckBoxl->Checked;

В зависимости от состояния индикатора этот оператор делает видимым или не-
видимым столбец поля Dep в таблице.

Внизу левой части окна приложения расположен навигатор и кнопка Больше...,
которая делает видимой форму Form2, содержащую характеристику и фотографию
сотрудника. Эта форма уже рассматривалась выше в разделе 9.7 (см. рис. 9.40).