ADO основано на технологии COM. Все объекты и интерфейсы ADO являются интерфейсами и объектами COM.
Рис 8. Архитектура ADO
Интерфейс Connection
Объекты этого типа выполняют следующие функции:
· Связь с сервером.
· Управление транзакциями.
· Получение информации о произошедших ошибках (свойство Errors).
· Получение информации о схеме данных (таблицы, поля и так далее).
Рис 9. Схема взаимодействия в ADO основных COM интерфейсов
Интерфейсы Recordset и Field
Интерфейс Recordset (на нижнем уровне ADO это IRowset) является аналогом TDataSet в Delphi.
Поддерживает текущее положение и перемещение курсора, закладки (bookmarks), чтение, изменение и удаление записей и так далее. Значение полей и их типы доступны с помощью свойства Fields.
Интерфейс Field позволяет получать значение поля, его тип длину и так далее.
Интерфейсы Command и Parameter
Эти два типа позволяют работать с командами источника данных. Синтаксис команд для каждого из источников свой.
Интерфейс Property
Все объекты, кроме Parameter, имеют свойство Properties, которое позволяет получать и устанавливать параметры специфические для провайдера данных.
Библиотека довольно запутанная, многие функции дублированы в разных объектах. Например, Recordset можно создавать напрямую, методом Open, (причем предварительно создавать Connection не обязательно), можно получить как результат выполнения метода Command.Execute, либо после Connection.Execute задав команду без параметров.
Интерфейс Command инкапсулирован во все компоненты за исключением TADOConnection. Это сделано потому, что в ADO нет возможности получить данные не выполнив команду.
Интерфейс Recordset инкапсулирован в компоненты производные от TCustomADODataSet. Это компоненты TADODataSet, TADOTable, TADOQuery, TADOStoredProc. Получать данные из них возможно штатными средствами Delphi.
Возможно получение данных и при выполнении компонента TADOCommand. Метод этого компонента Execute возвращает тип _Recordset. После чего его можно, например, связать с компонентом TADODataSet следующим образом
ADODataSet1.RecordSet := ADOCommand1.Execute; |
Компоненты TADOTable, TADOQuery и TADOStoredProc являются частными случаями команды, соответственно для таблицы, SQL запроса и хранимой процедуры.
Тип Connection инкапсулируется в компонент TADOConnection.
Когда вы выполняете команду предварительно не открывая соединение, оно все равно создается. Получить к нему доступ возможно через свойство Recordset. Привязать компонент TADOConnection к уже открытому соединению возможно через свойство ConnectionObject.
Информацию о структуре базы данных можно получить с помощью метода OpenSchema компонента TADOConnection. Эта информация представлена как набор таблиц, как стандартизованных, так и специфических для провайдера. Таким способом можно узнать список таблиц, запросов, хранимых процедур и многое другое. Однако изменять структуру базы с помощью возвращаемых наборов данных невозможно.