- •Содержание
- •Введение
- •Создание приложений с использованием технологии 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)
- •Вариант 2. Поставки товаров
- •Вариант 3. Исполнители
- •Вариант 4. Картинная галерея
- •Вариант 5. Порт
- •Вариант 6. Студенты
- •Вариант 7. Строительная компания
- •Вариант 8. Автосалон
- •Вариант 9. Аэропорт
- •Вариант 10. Диагностический центр
- •Вариант 11. Реклама
- •Вариант 12. Быстрая пицца
- •Вариант 13. Клуб собаководов
- •Вариант 14. Грузоперевозки
- •Вариант 15. Аптека
- •Вариант 16. Автовокзал
- •Вариант 17. Общественная организация
- •Вариант 18. Учет потребления газа
Задание на практическую работу № 1
-
Создать таблицы БД в формате dBase IV или Paradox 7.
-
Установить индексы для каждой таблицы.
-
Задать ограничения целостности.
-
Ввести данные в таблицы. Количество записей в справочной таблице (в таблице со стороны «1» связи 1:М) должно быть не менее 10.
1.2. Практическая работа № 2: установление связей между таблицами в многотабличной базе данных
1.2.1. Создание алиаса
Удобно не просто указывать путь доступа к таблицам базы данных, а использовать для этого некий заменитель — псевдоним, называемый алиасом. Он сохраняется в отдельном конфигурационном файле в произвольном месте на диске и позволяет исключить из программы прямое указание пути доступа к базе данных. Такой подход дает возможность располагать данные в любом месте, не перекомпилируя при этом программу. Кроме пути доступа, в алиасе указываются тип базы данных, языковый драйвер и другая управляющая информация.
Для создания алиаса запустите утилиту конфигурации BDE, Пуск | Программы | Borland Delphi | BDE (рис. 5). Выполните команду меню Object | New и в появившемся окне выбора драйвера БД нажмите ОК. Появится новый алиас с именем STANDARD1.
Теперь можно изменить название алиаса на другое. Например, в нашем случае он будет называться Music. На вкладке Definition в пункте PATH необходимо указать путь к таблицам базы данных. Они все должны находиться в одном каталоге, в нашем случае d:\students\v313\bd. Для того чтобы сохранить изменения, выполните Object | Apply.
На этом конфигурирование BDE заканчивается, и окно можно закрыть.
1.2.2. Связывание таблиц
После того, как таблицы созданы, можно приступить к созданию приложения в Delphi. Для запуска Delphi выполните Пуск | Программы | Borland Delphi | Delphi.
Немного теории. Имеется несколько основных компонентов, которые используются для доступа к БД. Эти компоненты могут быть разделены на три группы:
Рис. 5. Создание алиаса (псевдонима) БД
-
невизуальные: TTable, TQuery, TDataSet, TField;
-
визуальные: TDBGrid, TDBEdit, TDBComboBox и другие элементы управления;
-
связующие: TDataSource.
Первая группа включает компоненты, которые используются для управления таблицами и запросами. Это компоненты типа TTable, TQuery, TDataSet и TField. В палитре компонентов эти объекты расположены на странице BDE и Data Access.
Вторая группа компонентов — визуальные, которые показывают данные пользователю и позволяют ему просматривать и модифицировать их. Эта группа включает компоненты типа TDBGrid, TDBEdit, TDBImage и TDBComboBox. В палитре компонентов эти объекты расположены на странице Data Controls.
Третий тип используется для того, чтобы связать предыдущие два типа объектов. К третьему типу относится только невизуальный компонент TDataSource (страница Data Access).
Построим простейшее приложение, работающее с базой данных.
Поместите на форму необходимое количество компонентов Table с вкладки BDE, DataSource с вкладки компонентов Data Access и DBGrid c вкладки Data Controls, иcходя из количества таблиц. В нашем случае таблиц четыре, следовательно, и каждого вида компонентов тоже будет четыре. Также необходимо поместить компонент DBNavigator c вкладки Data Controls, он позволяет манипулировать данными таблиц.
Теперь установим цепочку связей между этими компонентами. Для этого выделите мышкой DataSource1 и найдите в Object Inspector (в инспекторе объектов) пункт DataSet. Щелкните на этом свойстве и выберите из списка Table1.
Выделите на форме DBGrid1 и в окне Object Inspector щелкните на его свойстве DataSource. Выберите из списка DataSource1.
Осталось связать компонент Table1 с необходимой таблицей базы данных. Для этого служат два свойства компонента Table: DatabaseName и TableName. Выделяем компонент Table1 и в Object Inspector в пункте DatabaseName выбираем созданный нами алиас (в нашем случае Music), а в пункте TableName таблицу a.dbf.
Теперь таблица привязана к сетке DBGrid1, но данные таблицы еще не отображаются. Для отображения данных необходимо свойство Active компонента Table1 установить в True. Эта операция осуществляет соединение с базой данных.
Аналогично связываются и компоненты других таблиц.
Свойство DataSource компонента DBNavigator необходимо установить на компонент DataSource, связанный с таблицей, которой вы хотите управлять.
Когда связи между компонентами установлены, необходимо произвести связывание таблиц базы данных. Связывание таблиц выполняется между компонентами Table.
Две таблицы чаще всего связаны друг с другом отношением «один-ко-многим» (1:M) по ключевым полям (индексированными полями). Одна из этих связанных таблиц является главной (master), а другая — вспомогательной, детализирующей (detail).
Для установления отношения "один-ко-многим" в наборе данных предназначены три свойства — MasterSource, IndexName и MasterFields, которые задаются для подчиненной таблицы. Набор данных главной таблицы не требует никаких дополнительных настроек, и заданная связь будет работать только при перемещениях курсора по записям главной таблицы.
Свойство MasterSource определяет компонент DataSource, который связан с главной таблицей.
Свойство IndexName указывает имя индекса подчиненной таблицы, который будет использован для связывания. Это индекс ключевого поля, по которому устанавливается связь.
Примечание: для таблиц Paradox свойство IndexName устанавливать не требуется, если связывание происходит по первичному ключу. В этом случае IndexName необходимо оставить пустым.
Далее при помощи свойства MasterFields необходимо установить отношения между полями главной и подчиненной таблицы. В этом свойстве содержится имя индексированного поля, по которому устанавливается связь. Если таких полей несколько, их имена разделяются точкой с запятой. При этом не все поля, входящие в индекс, обязаны участвовать в создании отношения.
Для задания свойства MasterFields можно использовать редактор связей полей Field Link Designer (рис. 6), который вызывается щелчком на кнопке в поле редактирования этого свойства в инспекторе объектов.
Здесь в разворачивающемся списке Available Indexes выбирается требуемый индекс для подчиненной таблицы. После этого в списке Detail Fields появляются имена всех полей, входящих в этот индекс. В списке Master Fields отображаются все поля главной таблицы.
Рис. 6. Редактор связей полей
Для создания связи между полями в левом списке выбирается поле подчиненной таблицы, а затем соответствующее ему поле главной таблицы в правом списке. Нажимаем кнопку Add, после чего появляется отношение по двум полям главной и подчиненной таблиц. Созданная связь отображается в списке Joined Fields.
Уже созданные связи можно удалить. Кнопка Delete удаляет выбранную связь, кнопка Clear — все связи.
Рис. 7. Пример связывания таблиц БД
После создания связей между полями отношение "один-ко-многим" считается установленным. Теперь достаточно открыть оба набора данных, чтобы увидеть работу отношения (рис. 7).
В нашем примере мы хотим, чтобы пользователь, перемещаясь по таблице музыкальных альбомов, видел не только информацию об альбоме, но и имя исполнителя, название стиля, а также информацию о записях, входящих в альбом. В этом случае главной является таблица C, а подчиненными — таблицы A, B и D.