- •Технології проектування баз даних в delphi
- •6.051001 - Метрологія та інформаційно-вимірювальні технології
- •Технології проектування баз даних в delphi
- •6.051001 - Метрологія та інформаційно-вимірювальні технології
- •1Введение
- •2Введение в базы данных
- •2.1Типы субд
- •2.2Стандарт odbc
- •2.3Технологии взаимодействия delphi с бд
- •2.3.1Особенности технологии bde
- •2.3.2Особенности технологии ado
- •2.4Таблицы бд и связи между ними
- •2.5Первичные ключи и индексы
- •2.6Демонстрационная бд "поставщик книг"
- •3Использование odbc для подключения источника данных. Псевдонимы бд
- •3.1Внешний и внутренний псевдонимы бд
- •3.1.1Создание внешнего псевдонима
- •3.1.2Проверка работоспособности внешнего псевдонима в среде Delphi
- •3.2Внутренний псевдоним бд
- •3.2.1Назначение внутреннего псевдонима бд
- •3.2.2Создание внутреннего псевдонима
- •3.2.3Преимущества использования внутреннего псевдонима и проблемы перехода на другие субд
- •4Создание проекта с бд в технологии bde
- •4.1Особенности использования bde для соединения с источником данных
- •4.2Структура проекта с бд и визуальными компонентами
- •4.3Активизация проекта
- •4.4.4Компоненты tdbGrid
- •4.5Модуль данных
- •4.5.1Создание модуля данных tDataModule
- •4.5.2Связь модуля главного окна с модулем данных
- •4.5.3Создание компонента tDatabase
- •4.5.4Создание компонента tTable
- •4.5.5Создание компонента tDataSource
- •4.5.6Связь модуля главного окна с модулем данных
- •4.5.7Связь сетки tdbGrid и навигатора dbNavigator c источником данных tDataSource
- •4.5.8Связь главный-детальный между наборами данных
- •4.5.9Задание реляционной связи между наборами данных
- •4.5.10Активизация наборов данных
- •4.5.11Недостатки полученных решений и пути их устранения
- •4.6Объекты-столбцы сетки dbGrid
- •4.6.1Создание объектов-столбцов
- •4.6.2Редактирование объекта-столбца
- •4.7Объекты-поля наборов данных
- •4.7.1Назначение объектов-полей
- •4.7.2Создание объектов-полей
- •4.7.3Присоединение к наборам данных новых полей
- •4.7.4Присоединение полей из других таблиц. Подстановочные поля
- •4.7.5Вычисляемые поля
- •4.8Обработчики событий компонент работы с бд
- •4.8.1Обработчики событий OnGetText полей нд и компонента визуализации данных tdbGrid
- •4.8.2Установка системных переменных в обработчике событя OnCreate
- •4.9Бизнес-правила и обработчики событий компонент работы с бд
- •5Sql запросы к бд
- •5.1Компонент tQuery
- •5.2Создание компонента tQuery
- •5.3Использования компонента tQuery
- •5.3.1Свойство sql компонента tQuery
- •5.3.2Методы Open и ExecSql
- •5.3.3Схема программного формирования sql-запроса
- •5.3.4Параметрические запросы
- •5.3.5Параметрические запросы и свойство DataSource компонента tQuery
- •5.3.6Связь главный-детальный с компонентом tQuery в качестве детального набора данных
- •5.4Доступ к полям запроса
- •5.4.1Обращение к значению поля при помощи свойств объектов-полей Value и AsXxxx
- •5.4.2Обращение к значению поля при помощи свойств набора данных Fields и FieldValues
- •5.4.3Обращение к значению поля при помощи функции набора данных FieldByName
- •5.5Программный доступ к данным запроса
- •5.5.1Общая схема программного доступа к данным запроса
- •5.5.2Последовательная навигация по записям
- •5.6Обзор событий компонента tQuery
- •6Хранимые процедуры и триггеры
- •6.1Хранимые процедуры
- •6.2Создание хранимых процедур
- •6.3Вызов хранимых процедур
- •6.4Триггеры
- •7Наборы данных
- •7.1Обзор событий класса tdbDataSet
- •7.1.1Реализация каскадных изменений и бизнес-правил
- •7.1.2Другие события
- •8Технология ado
- •8.1Основные особенности технологии ado
- •8.2Реализация технологии ado в Delphi
- •8.3Создание проекта с бд в технологии ado. Установка связи с бд
- •8.3.1Создание модуля данных
- •8.3.2Начало настройки связи
- •8.3.3Выбор провайдера
- •8.3.4Настройка провайдера
- •8.3.5Настройка провайдера Microsoft Jet 4.0 ole db Provider
- •8.3.6Настройка провайдера Microsoft ole db Provider for odbc Drivers
- •8.3.7Завершение настройки связи
- •8.3.8Настройка оставшихся компонент модуля данных
- •8.4Особенности использования компонентов ado
- •8.4.1Базовые объекты ado
- •8.4.2Объект Recordset
- •8.4.3Объект Command
- •8.4.8Связной компонент tadoConnection
- •8.4.9Компонент tadoCommand
- •8.5Свойства, методы и события ado компонентов-наборов
- •8.5.1Общие свойства с bde-компонентами
- •8.5.2Специфические свойства
- •8.5.3Методы класса tCustomAdoDataSet
- •8.5.4События класса tCustomAdoDataSet
- •8.6Компонент tadoDataSet
- •8.7Компонент tadoTable
- •8.8Компонент tadoQuery
- •9Компоненты визуализации данных в Delphi
- •9.1Компонент tdbGrid
- •9.1.1Свойства
- •9.1.2Дополнительные возможности сетки
- •9.2Компоненты визуализации полей текущей записи
- •9.2.1Компонент tdbText
- •9.2.2Компонент tdbEdit
- •9.2.3Компонент tdbCheckBox
- •9.2.4Компонент tdbRadioGroup
- •9.2.5Списочные компоненты
- •9.2.6Компонент tdbMemo
- •9.2.7Компонент tdbRichEdit
- •9.2.8Компонент tdbCtrlGrid
- •9.2.9Компонент tdbNavigator
- •Приложение 2. Бд "поставщик книг"
- •Рекомендованная литература
8.5Свойства, методы и события ado компонентов-наборов
8.5.1Общие свойства с bde-компонентами
В состав ADO-компонентов входят 4 компонента-набора: TADODataSet, TADOTable, TADOTable и TADOStoredProc. Как и аналогичные BDE‑компоненты, они имеют общего родителя — абстрактный класс TDataSet, и, следовательно, большую часть своих методов, свойств и событий они унаследовали от этого класса, разделяя, таким образом, их со своими BDE‑аналогами (рисунок 10.15).
TComponent
TDataSet
TCastomADODataSet TBDEDataSet
TDBDataSet
ADO-наборы BDE-наборы
Рисунок 10.15 - Фрагмент иерархии наследования ADO и BDE компонентов-наборов
Например, для доступа к данным ADO-компоненты используют те же свойства, что и BDE-компоненты. Следующие операторы аналогичны по функциональности (предполагается, что поле Company — второе по счету в массиве Fields и для него создан объект ADOTable1Company):
Caption := ADOTable1.FieldValues['Company'];
Caption := ADOTable1['Company'];
Caption := ADOTable1.FieldByName('Company').AsString;
Caption := ADOTable1.Fields[1].Value;
Caption := ADOTable1Company.AsString;
Примечание. Понятно, что к моменту использования этих операторов компонент ADOTable1 должен быть связан через провайдер с физической таблицей БД и открыт.
Модификация данных и навигация по ним также не отличаются от описанных ранее для BDE-компонент:
ADOTable1.Edit;
ADOTable1Company.Value: = 'Новая компания';
ADOTable1.Post;
Или:
ADOTable1.Open;
while not ADOTable1.EOF do begin
…
ADOTable1.Next
end;
ADO-наборы, так же как BDE- наборы, визуализируют данные через компоненты-посредники TDataSource и компоненты вкладки Data Controls палитры компонентов Delphi.
8.5.2Специфические свойства
ADO-наборы имеют непосредственного родителя TCustomADODataSet, от которого они унаследовали многие специфические свойства. Здесь дается общий обзор особенностей ADO-наборов, а также описываются наиболее важные свойства, методы и события класса TCustomADODataSet.
Прежде всего, это свойства Connection и ConnectionString, с помощью которых ADO-набор может самостоятельно связаться с источником данных.
С помощью свойства BlockReadSize программист может создать такой режим работы, когда навигация по данным не приводит к изменениям в связанных с набором визуализирующих компонентах. Для этого в свойстве BlockReadSize следует поместить любое ненулевое значение. В этом случае свойство State автоматически примет значение dsBlockRead и навигация по НД будет проходить значительно быстрее. Чтобы отменить этот режим, достаточно поместить в свойство BlockReadSize значение 0.
В отличие от BDE наборы ADO могут создавать курсоры двух типов — на стороне клиента и на стороне сервера (свойство CursorConnection). В сочетании со свойством CursorType это дает программисту гибкий инструмент влияния на скоростные качества передачи данных и разграничение доступа к данным. С помощью свойства EnabledBCD программист может заменить вещественные данные форматом двоично-десятичных данных (BCD). Этот формат позволяет избежать ошибок округления вещественных чисел.
Новым по сравнению с BDE-компонентами является также свойство LockType, позволяющее повысить скорость работы в многопользовательской среде за счет учета специфики БД.
С помощью свойства MarshalOptions можно несколько снизить нагрузку на сеть при создании курсора на клиентской машине.
Важным отличием является то, что ADO-компоненты имеют свойство Recordset, содержащее ссылку на одноименный базовый объект. Если программист хорошо знаком с технологией ADO, он может напрямую обратиться к этому свойству для более гибкого доступа к данным.
ADO-компоненты способны работать с кэшированными данными, но делают это по-своему. Во-первых, в терминологии ADO вместо термина кэширование данных используется понятие пакетная обработка данных, после завершения которой все сделанные в пакете изменения либо подтверждаются, либо отвергаются. Для работы в пакетном режиме ADO-набор должен:
в свойстве CursorType содержать значение ctKeySet, заданное по умолчанию, или значение ctStatic;
в свойстве LockType содержать значение ltBatchOptimistic. Кроме того, сами данные должны быть получены с помощью SQL-запроса SELECT. Вот как, например, готовится компонент ADODataSet к работе в пакетном режиме:
with ADODataSet1 do begin
CursorLocation := clUseServer;
CursorType := ctKeyset;
LockType. := ltBatchOptimistic;
CommandType : = cmdText;
CommandText := 'SELECT * FROM BOOKS';
Open;
end;
Следует заметить, что поскольку компонент TADOTable не имеет свойств CommandType и CommandText, его перевод в режим пакетной обработки данных имеет свою специфику:
ADOTable1.LockType := ltBatchOptimistik;
ADOTable1.Open;
В пакетном режиме можно по этой же схеме выполнять кэшированные изменения в хранимых процедурах, которые возвращают набор записей:
ADOStoredProc1.ProcedureName : = 'MyBatchQuery';
ADOStoredProc1.LockType := ltBatchOptimistic;
ADOStoredProc1.Open;
После получения пакетного набора записей с помощью свойства RecordStatus можно проверить статус конкретной записи, а с помощью свойства FilterGroup -отфильтровать записи. Подтвердить изменения можно с помощью метода UpdateBatch; прекратить режим пакетной обработки и отказаться от сделанных изменений - с помощью метода CancelBatch. При этом с помощью передаваемых этим методам параметров можно отменить или подтвердить изменения для всех или только для отфильтрованных записей.
Есть определенная специфика в механизме сортировки записей ADO-набора. Для сортировки в свойство Sort помещают список полей сортировки, разделенных запятыми. Каждое поле может дополнительно снабжаться признаками ASCENDING (ASC) или DESCENDING (DESC) для указания соответственно восходящего или нисходящего порядка сортировки (если ни одно из этих слов не указано, реализуется восходящая сортировка), например:
ADOQuery1.Sort := 'LastName ASC, DateDue DESC';
Если в свойство Sort помещена пустая строка, записи не сортируются и предъявляются в том виде, в котором они получены из БД. Если для НД создан клиентский курсор и нет соответствующих индексов для сортировки, на клиентской машине создается временный индекс, который уничтожается при изменении свойства Sort.
