- •Базы данных
- •Содержание
- •Введение
- •1. Создание приложений с использованием технологии bde
- •1.1. Лабораторная работа № 1: создание базы данных
- •1.1.1. Создание таблиц dBase IV
- •1.1.2. Создание индексов
- •1.1.3. Создание таблиц Paradox 7
- •1.1.4. Задание свойств таблицы Paradox 7
- •Задание на лабораторную работу № 1
- •1.2. Лабораторная работа № 2: установление связей между таблицами в многотабличной базе данных
- •1.2.1. Создание алиаса
- •1.2.2. Связывание таблиц
- •Задание на лабораторную работу № 2
- •1.3. Лабораторная работа № 3: работа с полями и компонентом dbGrid
- •1.3.1. Использование объектов-полей
- •1.3.2. Обращение к значению поля
- •1.3.3. События объекта-поля
- •1 Рис. 10. Пример использования события OnCellClick .3.4. События сетки dbGrid
- •1.3.5. Создание объектов-столбцов в dbGrid
- •1.3.6. Формирование списка возможных значений столбца
- •Задание на лабораторную работу № 3:
- •1.4. Лабораторная работа № 4: работа с наборами данных (компонент Table)
- •1.4.1. Открытие и закрытие набора данных
- •1.4.2. Доступ к записям
- •1.4.3. Навигация по набору данных
- •1.4.4. Поиск записей в наборах данных
- •1.4.5. Реализация каскадных изменений
- •1.4.6. Пример выполнения лабораторной работы
- •Задание на лабораторную работу № 4
- •1.5. Лабораторная работа № 5: работа с отчетами
- •1.5.1. Создание простейшего отчета
- •1.5.2. Создание отчета для связанных наборов данных
- •1.5.3. Использование выражений (компонент qrExpr)
- •1.5.4. Группирование данных в отчете
- •Задание на лабораторную работу № 5:
- •1.6. Лабораторная работа № 6: sql-запросы (компонент Query)
- •Задание на лабораторную работу № 6
- •2. Создание приложений, работающих с базами данных interbase
- •2.1. Лабораторная работа № 1: создание схемы базы данных
- •2.2. Лабораторная работа № 2: доступ к базе данных InterBase c использованием dbExpress
- •2.3. Лабораторная работа № 3: транзакции
- •2.4. Лабораторная работа № 4: отображение данных запроса
- •2.5. Лабораторная работа № 5: вычисляемые, агрегатные и подстановочные поля
- •2.5.1. Вычисляемые поля
- •2.5.2. Агрегатные поля
- •2.5.3. Подстановочные поля
- •2.6. Лабораторная работа № 6: связь Master-Detail
- •2.7. Лабораторная работа № 7: локальная репликация данных
- •Приложение 1 варианты заданий к лабораторным работам Вариант 1. Прием заказов
- •Вариант 2. Поставки товаров
- •Вариант 3. Исполнители
- •Вариант 4. Картинная галерея
- •Вариант 5. Порт
- •Вариант 6. Студенты
- •Вариант 7. Строительная компания
- •Вариант 8. Автосалон
- •Вариант 9. Аэропорт
- •Вариант 10. Диагностический центр
- •Вариант 11. Реклама
- •Вариант 12. Быстрая пицца
- •Вариант 13. Клуб собаководов
- •Вариант 14. Грузоперевозки
- •Вариант 15. Аптека
- •Вариант 16. Автовокзал
- •Вариант 17. Общественная организация
- •Вариант 18. Учет потребления газа
- •Приложение 2 порядок выполнения лабораторных работ
- •Библиографический список
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, предназначенный для открытия файла, используется аналогично.