Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка БД.doc
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
842.75 Кб
Скачать

2.6. Лабораторная работа № 6: связь Master-Detail

Задание: Написать программу, отображающую связь Master-Detail между несколькими наборами данных. Для клиентских наборов данных сделать два варианта: как и для обычных наборов данных и с использованием вложенных таблиц (Nested Tables).

Выполнение.

Поместите на форму и настройте компонент SQLConnection. Для каждой из связываемых таблиц добавьте компонент SQLTable (закладка dbExpress) и настройте его свойства SQLConnection и ableName.

Для главной таблицы выполните отображение ее данных в DBGrid (см. лаб. работу № 2), используя вместо SQLDataSet уже имеющийся компонент SQLTable.

Далее, добавьте компонент DataSource для связи главной таблицы с подчиненными. Укажите в его свойстве DataSet компонент SQLTable главной таблицы. В свойстве MasterSource компонента SQLTable подчиненной таблицы укажите новый DataSource и выберите поля связи в MasterFields.

Откройте редактор полей клиентского набора данных главной таблицы. Добавьте все возможные поля. Кроме того, чтобы связать подчиненную таблицы с главной, необходимо создать поле, описывающее вложенный набор данных. Для этого закройте клиентский набор главной таблицы (Active:=False), откройте редактор полей и выберите команду New Field во всплывающем меню. Укажите имя нового поля (важно: оно должно совпадать с именем компонента SQLTable подчиненной таблицы, т.е. если подчиненная таблица называется SQLTable2, то и полю нужно задать такое же имя). Если имя задано верно, в списке Type появится тип поля DataSet. Выберите тип Data среди вариантов Field Type. После этого в списке редактора полей появится новое поле, которое для каждой записи таблицы будет содержать вложенный набор данных с записями из связанной таблицы.

Для подчиненной таблицы добавьте компоненты ClientDataSet, DataSource и DBGrid. В свойстве DataSetField клиентского набора данных укажите поле вложенного набора, созданное ранее.

Сделайте наборы данных SQLTable и ClientDataSet главной таблицы активными. Если все выполнено верно, то во время разработки в компонентах DBGrid должны появиться записи связанных таблиц. Запустите программу и убедитесь, что в DBGrid подчиненной таблицы отображаются записи, связанные с выбранной записью главной таблицы.

2.7. Лабораторная работа № 7: локальная репликация данных

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

Выполнение.

Используйте «модель портфеля», описанную в теоретическом курсе по InterBase. Вначале произведите подключение к СУБД и загрузите данные таблицы в клиентский набор данных, после чего отключитесь от сервера:

SQLConnection1.Open; //устанавливаем соединение с БД,

SQLTable1.Open; //открываем основной набор данных,

ClientDataSet1.Close;//обновляем данные клиентского набора,

ClientDataSet1.Open;

SQLTable1.Close; //закрываем основной набор данных

SQLConnection1.Close;//и отключаемся от БД

Перед завершением работы (событие OnClose главной формы) предоставьте пользователю возможность выбора (MessageDlg) и выполните следующее:

  • если пользователь решил сохранить изменения на сервере, вызовите метод ApplyUpdates клиентского набора данных;

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

Кроме того, предусмотрите возможность загрузки в клиентский набор локальной копии данных с помощью метода LoadFromFile.

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

Использование диалоговых окон выбора файлов

Диалог сохранения файла SaveDialog находится на закладке Dialogs. Использовать его можно, например, так:

if SaveDialog1.Execute then

ClientDataSet1.SaveToFile(SaveDialog1.FileName);

Здесь SaveDialog1.FileName — полное имя и путь файла, указанного пользователем. Метод SaveDialog1.Execute откроет окно диалога и вернет True, если пользователь выбрал файл и нажал ОК. Компонент OpenDialog, предназначенный для открытия файла, используется аналогично.