- •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. Бд "поставщик книг"
- •Рекомендованная литература
КомпонентtQuery
Компонент TQuery порожден от родительского класса TDBDataSet, рассмотренного в разделе 5, и наследует от него основные методы, события и свойства.
Таким образом, компонент TQuery может рассматриваться как эквивалент компонента TTable, который отличается только тем, что его состав определяется содержимым запроса и располагается в локальной таблице. Следовательно, процесс создания в модуле данных компонента TQuery и организация его связи с компонентом TDataSource остается такой же, как и у компонента TTable. Ниже показан процесс подключения компонента TQuery к проекту.
Так же как и компонент TTable компонент TQuery имеет собственные свойства, методы и события, наиболее важные из которых рассматриваются в этом разделе.
СозданиекомпонентаtQuery
СозданиекомпонентаTQueryпрактически мало чем не отличается от создания компонентаTTable.
Перенесите в окно дерева объектов компонент TQuery (вкладка BDE) и "положите" его на псевдоним ААА. В окне инспектора объектов в свойстве DatabaseName нового компонента автоматически появится имя локального псевдонима ААА, а в поле Name - имя компонента Query1. Имеет смысл заменить имя компонента на более осмысленное, например, quNakls или quNakls. Слева от компонента в окне дерева объектов появится красный знак вопроса, означающий, что компонент TQuery еще не готов к работе.
Компонент TQuery фактически является набором данных (НД). Однако в отличие от компонента TTable компонент TQuery используется для доступа к данным не какой-либо таблицы БД, а некоторого, определяемого программистом источника данных. Для компонента TTable это соотвтсвующая таблица физической БД, а для компонента TTable это SQL-запрос, который формируется в свойстве SQL запроса.
После определения SQL-запроса исчезнет красный знак вопроса слева от компонента в окне дерева объектов, что свидетельствует о готовности компонента к работе (рисунок 7.1).
Рисунок 4.41 –Окно дерева объектов с вопросом quNakls
Примечание. Как и для набора данных TTable свойство Active = True запроса TQuery позволяет активизировать запрос на этапе проектирования или выполнения программы.
Чтобы в главном окне программы сетка TDBGrid могла отображать данные из запроса quNakls, этому запросу нужно сопоставить собственный источник данных TDataSource. Для этого выделите компонент TDataSource на вкладке Data Access палитры компонентов и затем щелкните на запросе quNakls в окне дерева объектов. В результате будут сформированы поля DataSet и Name Инспектора объектов для этого компонента (рисунок 4.2).
Рисунок 4.42 –Окно инспектора объектов для компонента DataSource3
Окончательный вид модуля данных приведен на рисунке 4.3.
Рисунок 4.43 –Вид модуля даных
Для визуализации результатов запроса необходимо связать компонент DataSource3 с сеткой - компонент TDBGrid, на главной форме. В общем случае каждому запросу сопоставляется своя сетка - компонент TDBGrid. Способ ее создания и использования описан выше при работе с компонентом TTable.
Однако можно использовать уже существующую сетку, но только, если результат запроса получает данные из тех же полей, что были сопоставлены столбцам выбранной сетки. Так с целью уменьшения затрат на создание нового варианта главной формы выберем для этого уже существующий компонент DBGrid1.
Для этого необходимо выбрать соответствующее имя в поле DataSource компонента DBGrid1. Раскройте список свойства DataSource и выберите в нем пункт DataSource3 (рисунок 4.4).
Рисунок 4.44 –Окно инспектора объектов для компонента DBGrid1
Примечание 1. Если бы к этому моменту программист сформировал в свойстве SQL (см. раздел 4.3.1) текст запроса из рисунка4.5и установил свойство Active = True запроса quNakls, то сетка DBGrid1 тут же наполнилась бы данными в соответствии с этим запросом и содержимым источника данных DataSource1, связанным с набором данных НД Nakls.
Примечание 2. Выбор уже существующей сетки DBGrid1 породил одно неудобство, которое сразу видно при выполнении действий из примечания 1 и которое легко преодолевается. Дело в том, что два столбца этой сетки связаны с подстановочными полями таблицы Nakls. Однако запрос может обратиться только к реальным полям таблиц БД. Поэтому соответствующие столбцы сетки не заполняются данными. Для устранения этого недостатка необходимо связать запрос с реальными полями, которые были положены в основу создания подстановочных полей (см. ниже).