- •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. Бд "поставщик книг"
- •Рекомендованная литература
Наборы данных
Под набором данных (НД) понимается группа записей из одной или нескольких таблиц физической БД, доступная для компонент-наборов TTable, TQuery или TStoredProc. Указанные компоненты порождены от общего родительского классаTDBDataSet, который рассматривается в этом разделе.
Все излагаемые в этом разделе сведения в равной степени относятся к любому из указанных компонент-наборов - TTableилиTQuery, и составляют основу организации программного доступа к данным этих компонент.
Кроме того компоненты TTableилиTQueryTStoredProcимеют свои методы и свойства, направленные на повышение гибкости проектирования программ и программной обработки данных.
Примечание. Следует подчеркнуть, что родительскому классуTDBDataSetне сопоставляется компонент и поэтому он не имеет графического изображения. Однако этот класс доступен в программе, а его методы являются основой доступа к данным вНД.
Обзор событий класса tdbDataSet
Все НД получают в свое распоряжение большое количество событий, унаследованных ими от родительского класса TDBDataSet. Ниже рассматриваются наиболее важные из них.
Реализация каскадных изменений и бизнес-правил
Для реализации каскадных изменений и бизнес-правил в локальных или файл-серверных БД обычно используются обработчики событий AfterXXXX и BefогеХХХХ. Эти две группы событий связаны с изменениями НД (вставка, удаление или редактирование записи) и отличаются тем, что события BefогеХХХХ наступают непосредственно перед изменением НД, а события AfterXXXX - сразу после изменения НД. К ним относятся:
property After/BeforeCancel - возникает после/до отмены изменений в текущей записи;
property After/BeforeClose - возникает после/до закрытия НД;
property After/BeforeDelete - возникает после/до удаления текущей записи;
property After/BeforeEdit - возникает после/до редактирования текущей записи;
property After/Beforelnsert - возникает после/до вставки новой записи;
property After/BeforeOpen - возникает после/до открытия НД;
property After/BeforePost - возникает после/до выполнения метода Post;
property After/BeforeScroll - возникает после/до перехода к новой записи.
Обработчики этих событий в качестве параметра получают ссылку на НД, вызвавший соответствующее событие. Если необходимо прервать работу обработчика и предотвратить изменение таблиц БД, нужно возбудить исключение или вызвать процедуру Abort.
Безусловным достоинством реализации каскадных изменений и бизнес-правил именно в обработчиках этих событий является концентрация их в одном месте - в модуле данных (если, разумеется, все компоненты-наборы сосредоточены в едином модуле данных), что облегчает программисту отслеживание их и внесение в них необходимых изменений.
Другие события
Событие OnCalcFields возникает в момент, когда программа должна сформировать значения для вычисляемых полей. Следует заметить, что это событие возникает в момент открытия НД и при любом его изменении. Если пользователь интенсивно работает с НД, а алгоритм получения вычисляемых значений достаточно сложен, обработчик этого события может снизить производительность системы. Событие OnCalcFields в этом случае следует предварительно отключать, устанавливая значение False в свойство НД AutoCalcFields.
Следующее событие возникает в момент фильтрации записей:
type TFilterRecordEvent:
procedure(DataSet: TDataSet; var Accept: boolean) of object;
property OnFilterRecord: TFilterRecordEvent;
Обработчик должен поместить в параметр Accept значение True, если запись удовлетворяет условиям фильтрации.
Событие OnNewRecord возникает при вставке новой записи. В его обработчике программа может поместить в запись значения полей, заданные по умолчанию.