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

вернетесь в Редактор Полей, в котором появится ваше новое поле Pro. Вам осталось
задать для него в Инспекторе Объектов свойство DisplayLabel (заголовок), напри-
мер, «Тип», и, поскольку это поле булево, задать свойство DisplayValues (отобра-
жаемые значения для true и false), например, «произв.;управл.».

Теперь в ваших компонентах визуализации данных, например, в DBGrid, поя-
вится соответствующее поле (см. рис. 9.45).

Рис. 9.45

Приложение с введенными полями
просмотра отдела и типа отдела (после
столбца «Отдел»)

Обратите внимание, что для введенного вами поля Pro в Инспекторе Объектов
определены свойства FieldKind (с установленным значением fkLookup), Key Fi-
elds, LookupDataset, LookupKeyField и LookupResultField. В принципе вы могли
бы задать все эти свойства непосредственно в Инспекторе Объектов, но использова-
ние Редактора Полей более удобно.

В разделе 9.7 говорилось, что для полей просмотра в DBGrid можно в свойстве
Columns задать свойство Button Style поля равным cbsAuto и тогда при редактиро-
вании данных автоматически будет появляться выпадающий список, из которого
пользователь может выбирать соответствующее значение. В нашем примере хоро-
шо было бы это сделать для поля с названием отдела. Но ведь такое поле уже есть и
оно не просматриваемое. Как тут быть? Эту сложность можно обойти следующим
образом. Введите так, как было рассказано ранее, новое поле просмотра, назвав
его, например, DepLook и задав для него в окне рис. 9.44 значение Result Field рав-
ным Dep. Для вашего нового поля в Редакторе Полей задайте те же свойства
(прежде всего — DisplayLabel), какие задавали ранее для поля Dep. А затем в
свойстве Columns компонента DBGrid удалите поле Dep и вместо него вставьте в
таблицу поле DepLook. Ваша таблица будет выглядеть так же, как и ранее. Но при
редактировании отдела в какой-нибудь записи в соответствующей ячейке таблицы
будет появляться выпадающий список с названиями отделов. На рис. 9.45 изобра-
жен именно такой момент, когда сотрудника Борисова переводят из цеха 1 в цех 2.

Остановимся коротко еще на одном свойстве полей просмотра — LookupCac-
he. Это свойство определяет, будут ли значения просматриваемого поля кэширова-
ться, или просмотр будет осуществляться при каждом изменении текущей записи.
Если просматриваемая таблица (та, из которой берутся данные) не изменяется или
изменяется редко, лучше задать LookupCache = true. Это существенно сократит
затраты времени на просмотр, который будет осуществляться не в таблице, а в
кэше, который загружается один раз при открытии базы данных. Но если в про-
цессе работы просматриваемая таблица изменяется, a LookupCache = true, то ре-
зультат просмотра может быть неверным. В этих случаях надо вызывать метод
RefreshLookupList, чтобы обновить хранящийся список.

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

Поля просмотра имеют еще одну интересную особенность. Дело в том, что для
них предусмотрены специальные компоненты: DBLookupListBox и DBLookup-
ComboBox — список и выпадающий список. Если вы поместите на форму один из
этих компонентов, установите у него свойство DataSource, соответствующее таб-
лице, имеющей поля просмотра, а в свойстве DataField выберете одно из полей
просмотра, то значения просматриваемого поля сразу отобразятся в списке. При
этом не надо заботиться о загрузке в список значений, как это приходится делать
со списками DBListBox и DBComboBox (см. пример в разделе 9.12).