Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Подсоединение компонентов визуализации полей к источнику данных запроса






 

Ранее были рассмотрены вопросы представления полей из одной таблицы, но те же компоненты визуализации могут использоваться и в том случае, когда набор данных получен в результате запроса данных из нескольких таблиц базы данных. В этом случае вместо компонентов 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. Форма, сочетающая два режима визуализации, на этапе выполнения

 

Сравнивая оба рисунка, можно убедиться в корректной работе программы.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.