Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование БД в Delphi ВТиП.doc
Скачиваний:
53
Добавлен:
17.03.2016
Размер:
3.62 Mб
Скачать
      1. Связь главный-детальный между наборами данных

Если сейчас запустить проект на выполнение, то в сетках мы увидим содержимое 2-х НД: tbNakls и tbMove, которые между собой никак не связаны.

Однако в БД "Поставщик книг" таблицы NAKLS и MOVEBOOKсвязаны реляционной связью один ко многим. Т.е. одной записи в таблице NAKLS соответствует несколько записей в таблице MOVEBOOK. Такую связь между2‑мя наборами данных еще называютглавный-детальный.

Было бы желательно установить такую же реляционной связь между НД tbNakls и tbMove. В этом случае при дальнейшей обработке данных каждой записи в НД tbNakls будет соответствовать свой набор записей в НД tbMove.

Примечание. Механизм реляционной связи между2-мя наборами данных имеет смысл применять при использовании в качестве главного и детального только компонентов TTable. При использовании в качестве детального компонента TQuery используется другой способ (см. раздел 8).

      1. Задание реляционной связи между наборами данных

Находясь в окне модуля даных DM, нажмите клавишу F12 и перейдите в окно кода этого модуля dmNaklsUnit. После этого перейдите на вкладку Diagram в окне кода модуля данных. С помощью мыши "перетащите" компоненты tbNakls и tbMove из окна дерева объектов на вкладку Diagram.

Рисунок 3.28 –Расположение таблиц в окне Data Diagram

Для установления связи между таблицами щелкните на кнопке Master Detail панели инструментов, подведите указатель мыши в виде перечеркнутого круга к нижней кромке верхней таблицыNAKLS (в этот момент указатель превратится в крестик), нажмите левую кнопку мыши и, удерживая ее нажатой, прочертите линию к верхней кромке нижней таблицы MOVEBOOK, после чего отпустите кнопку. На экране появится окно конструктора связей (рисунок 3.20).

Чтобы установить связь между таблицами, нужно указать связываемые поля в родительской и дочерней таблицах. В списке Master Fields щелкните на имени поля NaklID, а в поле Detail Fields щелкните на имени поля MNakl. После чего щелкните на кнопке Add. Эта кнопка станет доступной только после выделения полей связи и перестает быть доступной после щелчка на ней. Закройте окно конструктора связей щелчком на кнопке ОК.

Рисунок 3.29 –Окно конструктора связей

После выполнения этих действий между таблицами NAKLS и MOVEBOOK устанавливается связь один ко многим по полю NaklID, о чем свидетельствует вид окна Data Diagram на рисунке 3.21.

Рисунок3.30 –Окно Data Diagram после установления связи между таблицами

Теперь, перемещаясь по НД tbNakls, для каждой накладной будет получен соответствующий набор книг из НД tbMove.

Аналогично на вкладку Diagram можно добить другие компоненты типа TTable, например tbBooks, и связать их с уже размещенными компонентами.

      1. Активизация наборов данных

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

Если в процессе создания НД tbNakls и tbMove не была выполнена их активизация, то ее следует выполнить вручную.

Для ручной активизации набора данных щелкните на таблице MOVEBOOK в окне дерева объектов.

Рисунок 3.31 –Окно Object TreeView после выделение таблицы

В окне инспектора объектов появятся свойства НД tbMove. Поместите в его свойство Active значение True.

Теперь в окне дерева объектов щелкните на НД tbNakls и в окне инспектора объектов поместите значение True в его свойство Active.

На этом начальный этап работы с окном модуля данных закончен, но он еще не связан с главным окном (см. подраздел 3.4).

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

Примечание 2. При внесении изменений в псевдонимы БД в ODBC или BDE в свойство Active в окне инспектора объектов для НД tbMove и НД tbNakls автоматически заносится False. Поэтому после внесения изменений необходимо принудительно занести значение True в свойство Active для НД tbMove и tbNakls.