Компоненты для работы с Microsoft ActiveX Data Objects (ADO) впервые появились в среде Delphi версии 5.
ADO — это технология стандартного обращения к реляционным структурам данных от Microsoft. Она аналогична BDE по назначению и сродни ему по возможностям.
Хочешь получить полноценный видеокурс по Delphi прямо сейчас? Кликни на картинку и оформи заказ:
ЗАКАЗАТЬ
В основе архитектуры ADO лежит объектная модель компонентов COM (Component Object Model). Все объекты и интерфейсы ADO представляют собой интерфейсы и объекты СОМ.
Модель СОМ является базовой для технологий ActiveX и OLE. Проиллюстрировать это отношение можно на примере объекта TObject, как базового объекта для VC L Delphi.
Технология СОМ работаете так называемыми СОМ-обьектами. Во многом СОМ-объекты похожи на обычные объекты визуальной библиотеки компонентов Delphi.
Но, в отличие от последних, СОМ-объекты не содержат поля, в них находятся лишь свойства и методы, а также интерфейсы.
Интерфейсы — это группы логически или семантически связанных процедур, которые обеспечивают связь между поставщиком услуги (сервером) и его клиентом. Названия интерфейсов начинаются с буквы I.
Обычный СОМ-объект включает в себя один или несколько интерфейсов. Кроме того, СОМ-объект содержит методы, которые позволяют приложению пользоваться им.
Технология СОМ имеет два явных плюса:
- создание СОМ-объектов не зависит от языка программирования. Таким образом, СОМ-объекты могут быть написаны на различных языках;
- СОМ-объекты пригодны для использования в любой среде программирования под Windows. В число этих сред входятDelphi, Visual С++, С++ Builder, Visual Basic и многие другие.
Технология СОМ реализуется с помощью СОМ-библиотек (такие файлы операционной системы, как OLE32.DLL и OLEAUT32.DLL). СОМ-библиотеки содержат набор стандартных интерфейсов, которые отвечают за функциональность СОМ-объекта, а также небольшой набор функций API, обеспечивающих создание СОМ-объектов и управление ими.
В Delphi воплощение и поддержка технологии СОМ называется Delphi ActiveX framework, DAX. Реализация DAX описана в модуле AxCtrls.
Рассмотрим особенности архитектуры ADO (рис. 12.1).
Рис. 12.1. Архитектура ADO
Перечислим основные интерфейсы ADO и кратко поясним их назначение:
- интерфейс IConnection выполняет следующие функции:
- осуществляет связь с сервером;
- управляет транзакциями;
- получает информацию о произошедших ошибках (свойство Errors);
- получает информацию о схеме данных (таблицы, поля и т. д.);
- интерфейс IRecordset (на нижнем уровне ADO это IRowset) является аналогом TDataSet в Delphi и поддерживает текущее положение и перемещение курсора, закладки (Bookmarks), чтение, изменение и удаление записей и т. п.;
- интерфейс IReld позволяет получать значение поля, его тип, длину и другие сведения о поле данных;
- интерфейсы ICommand и IParameter обеспечивают работу с командами источника данных. Синтаксис команд для каждого из источников свой собственный;
- интерфейс IProperty позволяет получать и устанавливать параметры, специфические для провайдера данных.
Для работы с механизмом ADO в Delphi 7 предназначены семь стандартных компонентов, расположенных на закладке ADO палитры компонентов (рис. 12.2).
Рис. 12.2. Закладка ADO
Первый компонент называется ADOConnection. Функционально он аналогичен компоненту Database закладки BDE. С помощью компонента ADOConnection можно указывать местоположение базы данных и работать с транзакциями. Рассмотрим основные свойства компонента ADOConnection, отображаемые в окне инспектора объектов (табл. 12.1).
Следующий компонент закладки ADO называется ADOCommand. Он предназначен для выполнения SQL-команды без возврата результирующего набора данных. Основные свойства этого компонента представлены в табл. 12.2.
Таблица 12.2. Основные свойства компонента ADOCommand
Третий компонент закладки ADO носит имя ADODataSet Его назначение — получение набора данных из одной или нескольких таблиц базы данных. Кроме того, он также позволяет работать с возвращенным набором данных визуальным компонентам, предназначенным для отображения данных. Это наиболее общий компонент для работы с набором данных, который может использоваться вместо компонентов ADOTable, ADOQuery или ADOStoredProc. В таблице 12.3 приведены основные свойства указанного компонента.
Таблица 12.3. Основные свойства компонента ADODataSet
Следующий компонент закладки ADO называется ADOTable. Он является аналогом компонента Table, расположенного на закладке BDE, и предназначен для доступа к таблице с помощью механизма ADO. Компонент ADOTable имеет свойства, которые мы уже рассматривали ранее в компонентах Table и ADODataSet, поэтому мы не будем возвращаться к ним еще раз.
Компонент ADOQuery представляет собой запрос к базе данных. Это может быть как запрос, в результате которого возвращаются данные из базы (например, SELECT), так и запрос, не формирующий результирующего набора данных (например, INSERT). Компонент аналогичен компоненту Query из BDE. Все основные его свойства мы уже рассматривали в описании свойств компонентов Query н ADODataSet
Компонент ADOStoredProc предназначен для вызова процедуры, хранимой на сервере базы данных. В отличие от BDE и InterBase хранимые процедуры в ADO могут возвращать набор данных, поэтому компонент такого типа является потомком DataSet и может выступать источником данных в компонентах типа DataSource.
Последний компонент закладки ADO называется RDSConnection. Этот компонент управляет маршалингом данных, когда набор записей переносится из одного компьютера на другой.
- OnWillConnect — вызывается перед установкой соединения;
- OnConnectComplete — вызывается после установки соединения;
- OnDisconnect — активируется при разрыве соединения. Эти события инкапсулированы в компоненте ADOConnection.События транзакции:
- OnBeginTransComplete — происходят при выполнении BeginTrans;
- OnCommitTransComplete — происходят при выполнении CommitTrans;
- OnRollbackTransComplete — вызываются при выполнении RollbackTrans.
События данной группы инкапсулированы в компоненте ADOConnection. События выполнения команд OnWillExecute и OnExecuteComplete вызываются перед выполнением команды и после него соответственно.
- События выборки данных.
- OnFetchProgress — многократно вызывается в процессе выборки данных;
- OnFetchComplete — завершение выборки.
- Уведомления об изменении положения текущей записи в наборе:
- OnWillMove — вызывается до изменения положения текущей записи. Позволяет отменить действие;
- OnMoveComplete — вызывается после изменения положения текущей записи;
- OnEndOfRecordset — генерируется при достижении конца набора данных. Позволяет добавить новую запись.
- Уведомления об изменении набора данных.
- OnWillChangeField, OnFieldChangeComplete — вызываются до и после изменения текущей записи набора;
- OnWillChangeRecord, OnRecordChangeComplete — вызываются до и после изменения, добавления, удаления строки набора и при отмене этих действий;
- OnWillChangeRecordset, OnRecordsetChangeComplete — вызываются до и после открытия, закрытия, повторного запроса и синхронизации набора данных.
- установка соединения с сервером (Connection);
- выполнение команды (Execute);
- выборка данных (Fetch).
- вызывается обработчик события OnWillConnect;
- управление передается программе.
- вызовется обработчик события OnWillExecute;
- управление передастся программе.
- ADOTable закладки ADO;
- DataSource закладки Data Access;
- DBGrid закладки Data Controls.
Рис 12.4. Окно выбора файлов связи с данными
Этот файл входит в дистрибутив Delphi и указывает на базу данных формата Microsoft Access, которая также поставляется вместе с Delphi. Нажмем кнопку Открыть, и в поле Use Data Link File появится строка C:\Program Files\Common Files\SYSTEM\ole db\Data Links\DBDEMOS.udl.
Нажимаем OK — база данных выбрана. Теперь осталось определить таблицубазы данных. Для этого в свойстве TableName компонента ADOTablel указываем, например, таблицу COUNTRY. Наконец, мы можем активировать набор данных — присвоим свойству Active компонента ADOTablel значение true. Все, приложение готово, и его можно запускать.