564___________________________________________Глава 10

10.1.6.5 Основные свойства Query, связывание таблиц

Большинство свойств Query аналогичны свойствам Table, рассмотренным ра.
нее (см. раздел 9.5 главы 9). Объекты полей создаются автоматически для тех по-
лей, которые перечислены в операторе SQL. Программный доступ к этим полям
осуществляется так же, как в Table, с помощью свойства Fields (например, Que-
ry l->Fields[0]) или методом FieldByName (например, Query !->FieldByNa-
me("Dep")). Можно также создавать объекты полей с помощью Редактора Полей,
вызываемого двойным щелчком на Query или из меню, всплывающего при щелчке
на Query правой кнопкой мыши. В этом случае доступ к объекту поля можно осу-
ществлять также и по его имени (например, QuerylDep).

Предупреждение

При использовании для Query Редактора Полей надо добавлять в нем все поля, перечислен-
ные в операторе SQL. Иначе поля, не добавленные в Редакторе Полей, не будут доступны.

Предупреждение

Доступ к полям по имени возможен только, если объекты полей были созданы с помощью
Редактора Полей.

Для доступа к значениям полей используются те же их свойства Value, AsSt-
ring, Aslnteger и т.п., что и в Table. Точно так же, как в Table, можно осуществ-
лять навигацию по набору данных, устанавливать фильтры, ограничивать вводи-
мые значения полей, кэшировать изменения.

Из свойств, отличных от Table, остановимся на свойстве DataSource. Это
свойство позволяет строить приложения, содержащие связанные друг с другом
таблицы. Рассмотрим, как это делается, на том же примере, который использовал-
ся в главе 9 при рассмотрении Table. Пусть мы хотим построить приложение,
включающее в себя таблицу Вер, содержащую список отделов (в поле Dep) и их ха-
рактеристику, в качестве головной таблицы и таблицу персонала Pers, содержа-
щую в поле Dep имя отдела, в котором работает каждый сотрудник. Мы хотим,
чтобы при выборе записи в таблице Dep в таблице Pers отбирались только записи,
относящиеся к выбранному отделу.

Откройте новое приложение. Перенесите на форму компоненты Queryl, Data-
Sourcel, DBGridI и соедините их обычной цепочкой: в DBGridI задайте свойство
DataSource равным DataSourcel, а в DataSourcel задайте свойство DataSet рав-
ным Queryl. Компонент Queryl настройте на таблицу Dep. Для этого установите
свойство DatabaseName (например, dbP), а в свойстве SQL напишите оператор

Select * from Dep

Установите свойство Active в true и убедитесь, что все работает нормально: в
DBGridI должно отобразиться содержимое таблицы Dep.

Создайте другую аналогичную цепочку, перенеся на форму компоненты Que-
ry2, DataSource2, DBGrid2, и свяжите ее с таблицей Pers запросом

Select * from Pers

в компоненте Query2. Установите свойство Active компонента Query2 в true и в
DBGrid2 должно отобразиться содержимое таблицы Pers.

Вы можете запустить приложение и убедиться, что оно работает, но таблицы
независимы. Теперь давайте свяжем эти таблицы. Делается это следующим обра
зом. Измените текст запроса в свойстве SQL вспомогательного компонента набора
данных Query2 на

Select * from Pers where (Dep=:Dep)