- •Bde та ado
- •Введение
- •Введение в базы данных
- •Типы субд
- •Стандарт odbc
- •Технологии взаимодействия delphi с бд
- •Особенности технологии bde
- •Особенности технологии ado
- •Таблицы бд и связи между ними
- •Первичные ключи и индексы
- •Демонстрационная бд "поставщик книг"
- •Использование odbc для подключения источника данных. Внешний псевдоним бд
- •Создание внешнего псевдонима бд
- •Создание проекта с бд в технологии bde
- •Особенности использованияbdeдля соединения с источником данных
- •Структура проекта с бд и визуальными компонентами
- •Активизация проекта
- •Главная форма проекта
- •Модуль данных
- •Создание модуля данныхTDataModule
- •Создание компонента tDatabase
- •Создание компонента tTable
- •Создание компонентаTDataSource
- •Связь модуля главного окна с модулем данных
- •Связь сеткиTdbGrid и навигатораDbNavigatorcисточником данныхTDataSource
- •Связь главный-детальный между наборами данных
- •Задание реляционной связи между наборами данных
- •Активизация наборов данных
- •Недостатки полученных решений и пути их устранения
- •Объекты-столбцы сетки dbGrid
- •Объекты-поля наборов данных
- •Создание объектов-полей
- •Присоединение к наборам данных новых полей
- •Присоединение полей из других таблиц. Подстановочные поля
- •Вычисляемые поля
- •Обработчики событий компонент работы с бд
- •Обработчики событий OnGetText полей нд и компонента визуализации данныхTdbGrid
- •Установка системных переменных в обработчике событяOnCreate
- •Бизнес-правила иобработчики событий компонент работы с бд
- •Implementation
- •Sql запросы к бд
- •КомпонентtQuery
- •СозданиекомпонентаtQuery
- •ИспользованиякомпонентаtQuery
- •Свойство sql
- •Методы Open и ExecSql
- •Параметрические запросы
- •Параметрические запросы и свойство DataSource компонента tQuery
- •Связь главный-детальный с компонентомTQuery в качестве детального набора данных
- •Доступ к полям запроса
- •Обращение к значению поля при помощи свойств объектов-полейValueиAsXxxx
- •Обращение к значению поля при помощи свойств набора данных Fields и FieldValues
- •Обращение к значению поля при помощи функции набора данных FieldByName
- •Программный доступ к данным запроса
- •Общая схема программного доступа к данным запроса
- •Последовательная навигация по записям
- •Обзор событий компонентаtQuery
- •Хранимые процедуры и триггеры
- •Хранимые процедуры
- •Создание хранимых процедур
- •Вызов хранимых процедур
- •Триггеры
- •Наборы данных
- •Обзор событий класса tdbDataSet
- •Реализация каскадных изменений и бизнес-правил
- •Другие события
- •Технология ado
- •Основные особенности технологии ado
- •Реализация технологии ado в Delphi
- •Создание проекта с бд в технологии ado. Установка связи с бд
- •Создание модуля данных
- •Начало настройки связи
- •Выбор провайдера
- •Настройка провайдера
- •Настройка провайдераMicrosoftJet4.0oledbProvider
- •Настройка провайдера Microsoft ole db Provider for odbc Drivers
- •Завершение настройки связи
- •Настройка оставшихся компонент модуля данных
- •Особенности использования компонентов ado
- •Базовые объекты ado
- •ОбъектRecordset
- •ОбъектCommand
- •ОбъектParameter
- •Компонент tadoCommand
- •Свойства, методы и события ado компонентов-наборов
- •Общие свойства с bde-компонентами
- •Специфические свойства
- •Методы класса tCustomAdoDataSet
- •События класса tCustomAdoDataSet
- •Компонент tadoDataSet
- •Компонент tadoTable
- •Компонент tadoQuery
- •Компоненты визуализации данных вDelphi
- •Компонент tdbGrid
- •Свойства
- •Дополнительные возможности сетки
- •Компоненты визуализации полей текущей записи
- •Компонент tdbText
- •Компонент tdbEdit
- •Компонент tdbCheckBox
- •Компонент tdbRadioGroup
- •Списочные компоненты
- •Компонент tdbMemo
- •Компонент tdbRichEdit
- •Компонент tdbCtrlGrid
- •Компонент tdbNavigator
- •Приложение 2. Бд "поставщик книг"
- •Рекомендованная литература
Связь главный-детальный между наборами данных
Если сейчас запустить проект на выполнение, то в сетках мы увидим содержимое 2-х НД: tbNakls и tbMove, которые между собой никак не связаны.
Однако в БД "Поставщик книг" таблицы NAKLS и MOVEBOOKсвязаны реляционной связью один ко многим. Т.е. одной записи в таблице NAKLS соответствует несколько записей в таблице MOVEBOOK. Такую связь между2‑мя наборами данных еще называютглавный-детальный.
Было бы желательно установить такую же реляционной связь между НД tbNakls и tbMove. В этом случае при дальнейшей обработке данных каждой записи в НД tbNakls будет соответствовать свой набор записей в НД tbMove.
Примечание. Механизм реляционной связи между2-мя наборами данных имеет смысл применять при использовании в качестве главного и детального только компонентов TTable. При использовании в качестве детального компонента TQuery используется другой способ (см. раздел 8).
Задание реляционной связи между наборами данных
Находясь в окне модуля даных 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, и связать их с уже размещенными компонентами.
Активизация наборов данных
Активизация набора данныхпозволяет выполнить отображение содержимого этого набора в соответствующей сетке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.