Создание приложений для работы с базами данных в сети 571

Решение проблемы возможно следующее. Вместо Table! на форму помещает-
ся компонент Query 1 и в его свойстве SQL записывается запрос:

Select * from Dep where Dep = :PDep

Тем самым в Queryl вводится параметр PDep, для которого в свойстве Params
надо задать тип string. В качестве выпадающего списка CBDep используется обыч-
ный, не связанный с данными компонент ComboBox. А в обработчик его события
OnChange вставляется код:

Queryl->Close();

Queryl->Params->Items[0]->AsString = CBdep->Text;

Queryl->0pen() ;

Этот код закрывает предыдущую связь Queryl с таблицей, изменяет значение
параметра PDep на текст, выбранный пользователем в CBDep, после чего выполня-
ется метод Open, который перемещает курсор таблицы на нужную запись.

В CBDep, как в DBComboBox в прежнем приложении, надо заранее занести
имена возможных подразделений. Для этого в обработчик события формы ОпСгеа-
te помещается код:

Queryl->SQL->Clear() ;

Queryl->SQL->Add("Select * from Dep");

Queryl->0pen() ;

Queryl->First() ;

//Заполнение ComboBox CBdep именами отделов
CBdep->Clear() ;

while (!Queryl->Eof)
(

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

Queryl->Next() ;

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

CBdep->ItemIndex = 0;

Queryl->Close();

Queryl->SQL->Clear() ;

Queryl->SQL->Add("Select * from Dep where Dep = :pDep");

Queryl->Params->Items[0]->AsString = CBdep->Text;

Queryl->0pen();

Queryl->First() ;

Первая часть этого кода выполняет запрос «Select * from Dep». Вторая часть
кода, используя этот запрос, загружает в выпадающий список CBdep значения
поля Dep, а в конце помещает строку «все отделы». Последняя часть кода загружа-
ет в Queryl необходимый для дальнейшей работы запрос «Select * from Dep where
Dep = :pDep».

Окно, отображающее тип подразделения, можно выполнить, как и раньше, на
компоненте типа DBEdit или DBText, связав его через DataSource с Queryl и с по-
лем Proisv. Поэтому имевшиеся в прежнем приложении компоненты ТаЫеЗ и Data-
SourceS не нужны.

Итак, с первой частью задачи мы справились и заменили компоненты Tablel
и ТаЫеЗ одним компонентом Queryl. Теперь давайте попробуем заменить компо-
нент ТаЫе2, с которым была связана таблица сотрудников, компонентом Query2,
связанным через DataSource2 с таблицей Pers. Это можно сделать двумя путями.

Во-первых, можно воспользоваться способом связи таблиц, рассмотренным
ранее. В Query2 можно поместить запрос «Select * from Pers where Dep = :Dep»,
вводящий параметр Dep, который в Query2 не надо определять. А в свойстве Data-
Source компонента Query2 указать на DataSourcel, который связан с таблицей
Dep. Тогда значение параметра будет браться из поля Dep текущей записи таблицы
Dep. Но при этом придется решать ряд проблем, связанных с наличием в выпадаю-