Студопедия

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

КАТЕГОРИИ:

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






Фильтрация записей связанных по внешнему ключу таблиц






 

Полезная особенность компонентов Table состоит в том, что в них встроен механизм фильтрации записей по внешнему ключу: в подчиненной таблице можно отфильтровать только те записи, которые отвечают некоторому значению внешнего ключа. При этом значения внешнего ключа (совпадают со значениями примарного ключа главной таблицы) могут отображаться в визуальном компоненте (DBGrid, например) и интерактивно изменяться, меняя и набор отфильтрованных записей.

Пусть требуется в одном компоненте DBGrid показывать идентификаторы студенческих групп, а в другом компоненте DBGrid отображать, отфильтрованные по номеру группы записи о студентах.

Откроем новый проект и поместим на форму следующие компоненты:

1. Table (имя по умолчанию Table1), свойство DatabaseName установим в значение STUDLIST_ODBC, свойство TableName установим в значение Students;

2. DataSource (имя по умолчанию DataSource1), свойство DataSet установим в значение Table1;

3. DBGrid (имя по умолчанию DBGrid1), свойство DataSource установим в значение DataSource1;

4. Table (имя по умолчанию Table2), свойство DatabaseName установим в значение STUDLIST_ODBC, свойство TableName установим в значение Groups;

5. DataSource (имя по умолчанию DataSource2), свойство DataSet установим в значение Table2;

6. DBGrid (имя по умолчанию DBGrid2), свойство DataSource установим в значение DataSource2.

Так настроенные компоненты работают независимо друг от друга, но это не то, что от них требуется. Поэтому у подчиненной таблицы Table1 свойство MasterSource установим в значение DataSource2, установив связь между таблицами. Для того, чтобы установить связь по внешнему ключу, нужно дать правильное значение полю MasterFields, которое определяет поля внешнего ключа (их может быть несколько). Данное свойство заполняется не вручную, а в специальном окне (раскрывается кнопкой с многоточием):

 

 

Рисунок 11. Окно формирования свойства MasterFields

 

В левом списке нужно выделить поле внешнего ключа, а в правом – поле примарного ключа главной таблицы. Только при правильном выборе полей станет доступной кнопка «Add», нажав которую получим в поле «Joined Fields» правильное условие связи таблиц, показанное на рисунке 12.

 

 

Рисунок 12. Окно формирования свойства MasterFields, после правильного выбора полей связи

 

Нажав кнопку «Ok» получаем заполненное свойство MasterFields, и форму, после активизации обоих компонентов Table (Active=true), как на рисунке 13.:

 

 

Рисунок 13. Форма с фильтрацией по номеру группы на основе двух компонентов Table

 

Следует отметить, что фильтрация всегда выполняется на основе активного индекса: для таблицы Groups активным (в свойстве IndexFieldNames) установлен индекс по полю GroupName (это видно по значениям второго столбца правого компонента DBGrid).

Cвойство IndexFieldNames может быть использовано в компоненте Table1 (после того, как связь по внешнему ключу установлена, свойство имеет значение Id_Gr) не только для фильтрации. Так, чтобы внутри группы фамилии студентов перечислялись в алфавитном порядке, нужно в свойство IndexFieldNames через «;» добавить второе поле Fio (первым обязательно должно идти поле внешнего ключа). Таким образом, фильтрация и сортировка записей легко сочетаются:

 

 

Рисунок 14. Форма с фильтрацией по номеру группы и сортировкой по фамилии студента

 

Новый способ фильтрации обладает несомненными достоинствами:

1. на форме нет лишних интерфейсных элементов;

2. все возможности выбора фильтра легко просматриваются;

3. значения фильтра не нужно вводить, что может привести к ошибкам;

4. не понадобилось писать программный код.

Единственный, но существенный недостаток в том, что критерий фильтрации определяется связью таблиц по внешнему ключу; никакой другой критерий фильтрации таким способом реализовать нельзя. Зато каскад, связанных по внешнему ключу таблиц, может быть произвольной длины. На рисунке 15 показан каскад из трех связанных по внешнему ключу таблиц:

 

 

Рисунок 15. Каскад трех связанных по внешнему ключу таблиц

 

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

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал