518 Глава 9

Рис. 9.40

Вспомогательное окно приложения, отображающее
характеристику и фотографию сотрудника

тельной форме, в выпадающем списке появится источник данных Forml->Da-
taSourcel, который и надо выбрать. А в главной форме надо аналогичным образом
сослаться на вспомогательную форму, чтобы в нужный момент можно было сде-
лать ее видимой. Тогда в обработчике события OnClick кнопки Больше... можно на-
писать оператор:

if (! Form2->Visible) Form2->Show();

который делает вспомогательную форму Form2 видимой, если она не была види-
мой до этого.

В рассмотренном приложении имеются определенные неудобства: результаты
редактирования будут* заноситься в базу данных только тогда, когда пользователь
перейдет к следующей записи. Кроме того при неверном указании отдела пользо-
ватель увидит сообщение об ошибке на английском языке, которое, возможно, бу-
дет ему мало понятно. Все это не трудно было бы исправить. Позднее мы еще вер-
немся к этому приложению и посмотрим, как его можно усовершенствовать.

9.8 Компонент Session

Компоненты Session осуществляют общее управление связыванием приложе-
ния с базами данных. Обычно пользователю не приходится заботиться о компонен-
те Session, поскольку C++Builder автоматически генерирует объект Session в каж-
дом приложении, работающем с базами данных. На этот объект можно ссылаться
через глобальную переменную Session.

Компонент Session имеет много полезных методов и позволяет легко работать
с BDE. Приведем простой пример использования некоторых методов Session. Да-
вайте построим приложение, позволяющее просматривать любую заданную поль-
зователем таблицу в любой заданной им доступной базе данных. Это приложение
(рис. 9.41) содержит два выпадающих списка типа TComboBox, названных cbAli-
as и cbTable. Первый из них предназначен для выбора пользователем псевдонима
базы данных, а второй — для выбора таблицы. Кнопка Просмотр предназначена
для просмотра выбранной таблицы в компоненте типа TDBGrid, связанном цепоч-
кой ссылок с компонентами DataSourcel и Tablel.

Чтобы такое приложение функционировало, надо при создании формы загру-
зить список cbDatabase доступными BDE псевдонимами. Это делается следующп"
оператором, помещенным в обработчик события OnCreate формы:

Session->GetAliasNames(cbAlias->Items);

Этот оператор использует метод GetAliasNames объекта Session, который пе-
редает в свой параметр типа TStrings (в данном примере это список cbAli-
as->Items) перечень псевдонимов баз данных, зарегистрированных в BDE.

При выборе пользователем в списке cbAlias базы данных надо загрузить спи-
сок cbTable перечнем таблиц выбранной базы данных. Это делается включением в
обработчик события OnChange компонента cbAlias операторов: