570 Глава 10

10.1.7 Примеры приложений с использованием Query

10.1.7.1 Пример замены Table на Query

Компоненты Table и Query имеют много общих свойств и методов и в некото-
рых простых случаях вы просто можете заменить в спроектированном приложе-
нии Table на Query, ничего не меняя в самой программе (если вы назовете компо-
нент Query тем же именем, которое имел Table). Но есть и существенные различия
этих компонентов, которые в общем случае не позволяют провести такую механи-
ческую замену. Основные из этих отличий:

• Результаты запроса Select в Query являются таблицами только для чтения и
редактировать их невозможно. Впрочем, в предыдущем разделе было показа-
но, как можно обойти это ограничение с помощью компонента UpdateSQL.

• Возможности групповой обработки записей и вычисления совокупных харак-
теристик, естественные в Query, возможны и при использовании Table, но
требуют организации циклического просмотра и менее эффективны.

Посмотрим, как сказываются эти различия между Table и Query на проекти-
ровании приложений. Наиболее отчетливо это можно увидеть, если попробовать
перевести на компонент Query приложение, разработанное ранее с использованием
Table. Возьмем для этой цели приложение, разработанное вами ранее в разде-
ле 9.12 главы 9, и попробуем заменить в нем все компоненты Table компонентами
Query. Чтобы не усложнять чрезмерно нашу задачу, откажемся от возможности
редактирования характеристики и фотографии сотрудника. А остальные функции
приложения попробуем реализовать. Результат вы можете посмотреть полностью в
примере на приложенном к книге диске. А основные моменты мы сейчас обсудим.

Вид нашего приложения в режиме Отбор представлен на рис. 10.5. Начнем
нашу работу с изменения левой верхней части окна, содержащей список выбора
подразделения. В прежнем приложении в качестве списка использовался компо-
нент CBDep типа TDBComboBox, связанный с цепочкой DataSourcel, Tablel, на-
строенной на таблицу Dep. При выборе пользователем подразделения в CBDep, ко-
торый отображал поле Dep, курсор таблицы перемещался на текущую запись, со-
ответствующую выбранному значению поля. Однако, при замене Tablel на компо
нент Queryl с запросом «Select * from Pers» в его свойстве SQL, это перестает рабо
тать. При выборе пользователем подразделения в CBDep никакого перемещени;;

курсора таблицы не происходит. Связано это с тем, что компонент Query с запро
сом Select только отображает данные, но не управляет ими.

Рис. 10.5

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