Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Средства для работы с базами данныхн.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
631.88 Кб
Скачать

2) Представление содержания двух таблиц бд

Теперь работу усложним. Представим содержание двух таблиц БД. Причем в двух вариантах:

а) без установления связи между таблицами на экранной форме;

б) отобразим данные таблицы с учетом связи между таблицами.

2.1) Отображение данных таблиц бд на экранной форме без установления связи между ними

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

Добавим в контейнер DataModule5 компонент ТТаblе (с именем Таblе2) для работы с таблицей Prihod базы данных PRIMER (значения свойств такие же, как у компонента Table1, но свойство TableName ссылается на имя таблицы Prihod.DB). Добавим в форму компонент TDataSource (имя по умолчанию DataSource2). Установим свойство DataSet этого компонента в значение Таblе2. Разместим в форме №3 компонент TDBGrid (имя по умолчанию DBGrid2) и установим его свойство DataSowce в значение DataSource2 (рис.23). Установим свойство Таbl2.Аvtive в True. После этого произойдет реальное связывание компонентов TTable с реально существующими таблицами Materialy.DB и Prihod.DB.

Рис.23. Форма с родительским и дочерними наборами данных во время разработки

Чтобы при просмотре нельзя было изменять данные о материалах (таблица Materialy.DB), установим свойства ReadOnly компонента DBGrid1 в положение True.

Запустим приложение на выполнение. Добавим несколько записей в таблицу Prihod.DB из компонента TDBGrid2. Обратите внимание, значение поля N_Prih формируется автоматически (рис. 24).

Рис.24. В подчиненном наборе данных показываются записи, связанные с текущей записью в родительском НД

2.2) Отображение данных таблиц бд на экранной форме с учетом связи между ними, т.Е. Реализация связи Master-Detail между наборами данных

Нам известно, что таблицы базы данных Materialy.DB и Prihod.DB находятся в отношении "один-ко-многим". Поскольку мы определили ссылочную целостность между этими таблицами, можно сделать так, чтобы при установке указателя на запись в наборе данных Table1 (ассоциированном с Materialy.DB) в наборе данных Таblе2 (ассоциированном с Prihod.DB) показывались только записи прихода текущего материала в Table1. Это реализуется через механизм связи наборов данных Master-Detail.

В инспекторе объектов для компонента Таblе2 установим значение свойства Master Source в DataSource1. Переместимся на значение свойства Master Fields и нажмем кнопку . В появившемся окне Field Link Designer установим параметры связи. В поле Available Indexes выберем в качестве текущего индекса по полю 'Material'. В списке Detail Fields выберем поле Material, в списке Master Fields выберем поле Material и нажмем кнопку Add. В поле Joined Fields будет сформировано выражение 'Material  Material' (рис. 25). Нажмем кнопку Ok.

Рис.25.Окно установки значения свойства MasterFields

Как можно заметить, в компоненте Таblе2 текущий индекс (свойство FieldIndexNames) заменен на индекс, построенный по полю 'Material'.

Теперь в наборе данных Table2 показываются только записи по приходу материала, текущего в наборе данных Table1 (рис. 26).

Рис.26. Связь Master-Detail – в дочернем наборе данных показываются только подчиненные записи