![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Подсоединение компонентов визуализации полей к источнику данных запроса
Ранее были рассмотрены вопросы представления полей из одной таблицы, но те же компоненты визуализации могут использоваться и в том случае, когда набор данных получен в результате запроса данных из нескольких таблиц базы данных. В этом случае вместо компонентов Table необходимо применять компоненты Query. В целом, методика визуализации полей остается той же самой. При использовании компонентов запроса (Query или ADOQuery) для формирования запроса используется свойство SQL, в котором содержится текст запроса на языке SQL. В данном примере в это свойство введен следующий текст:
SELECT Fio, Year, GroupName FROM Students, Groups WHERE Id_Gr=Groups.n
В директиве SELECT перечислены запрашиваемые поля (Fio, Year, GroupName), в директиве FROM перечислены таблицы, из которых извлекаются данные, а условие WHERE дает условие связи таблиц (в данном случае по внешнему ключу).
На рисунке 1 показано приложение на этапе выполнения:
Рисунок 1. Форма на основе запроса к двум таблицам базы данных
Не представляет труда добавить при необходимости новые поля из других таблиц, изменится текст свойства SQL и добавятся компоненты для просмотра новых полей. Пусть дополнительно требуется видеть название специальности. Тогда: 1. добавим на форму метку и компонент DBEdit (рисунок 2);
Рисунок 2. Форма с компонентами, добавленными для отображения названия специальности
2. изменим текст свойства SQL на следующий: SELECT Fio, Year, GroupName, SpecName FROM Students, Groups, Spec WHERE (Id_Gr=Groups.n) And (Id_Sp=Spec.n)
Добавлена новая таблица Spec, в поле SpecName которой содержится название специальности, и в директиву WHERE добавлено условие связи по внешнему ключу таблиц GroupName, SpecName. Условия, отражающие две связи по внешнему ключу между таблицами Students, Groups и Spec, должны соединяться в директиве WHERE с помощью связки And (логическое умножение, означающее, что должны быть истинны оба условия), а не связки OR (логическое сложение, означающее, что должно быть истинно хотя бы одно условие). В каждом из условий поле внешнего ключа в подчиненной таблице сравнивается с полем примарного ключа главной таблицы. Аналогичного результата можно добиться в директиве FROM:
SELECT Students.Fio, Students.Year, Groups.GroupName, Spec.SpecName FROM (Spec INNER JOIN Groups ON Spec.n = Groups.Id_Sp) INNER JOIN Students ON Groups.n = Students.Id_Gr;
Данный код не использует директивы WHERE поскольку в директиве FROM применяется конструкция INNER JOIN, которая эквивалентна проверке условий, использовавшейся ранее. В чем можно убедиться, запустив программу на выполнение. Какой выбирать вариант – дело разработчика.
Рисунок 3. Форма с компонентами, добавленными для отображения названия специальности, на этапе выполнения.
Отметим, что оба способа визуализации: 1. набора записей в компоненте DBGrid; 2. полей одной записи в компонентах DBText и DBEdit; прекрасно сочетаются вместе друг с другом. При этом в компоненте DBGrid показываются данные общего характера, а в компонентах DBText и DBEdit дается более детальная информация частного характера. В этом случае нет необходимости в использовании навигатора, поскольку его роль берет на себя компонент DBGrid. Создадим форму, подобную той, что на рисунке 3, но где фамилии студентов будут просматриваться в компоненте DBGrid. Для этого: 1. удалим компонент Label с текстом «ФИО студента»; 2. удалим компонент DBEdit, в котором показывалось поле Fio; 3. удалим компонент DBNavigator, поскольку его роль перейдет к компоненту DBGrid; 4. добавим компонент DBGrid и настроим его на источник данных; 5. с помощью редактора столбцов добавим в компонент DBGrid поле Fio. Форма должна принять вид, как на рисунке 4:
Рисунок 4. Форма, сочетающая два режима визуализации, на этапе разработки
После перекомпиляции и запуска получим результат, показанный на рисунке 5:
Рисунок 5. Форма, сочетающая два режима визуализации, на этапе выполнения
Сравнивая оба рисунка, можно убедиться в корректной работе программы.
|