На этом шаге мы рассмотрим компонент TADOConnection.
Компонент TADOConnection используется для соединения с различными источниками ADO и
представляет собой версию объекта ADO Connection для Delphi.
Применение компонента TADOConnection дает разработчику ряд преимуществ:
- все компоненты доступа к данным ADO обращаются к хранилищу данных через одно соединение;
- возможность напрямую задать объект провайдера соединения;
- строка подключения хранится в одном месте, вместо того чтобы храниться в нескольких
разных компонентах; - выполнение транзакций;
- возможность выполнять команды ADO;
- расширенное управление соединением при помощи методов-обработчиков событий.
Компонент TADOConnection выполняет роль концентратора соединения с хранилищем данных.
Для установления связи нужно с помощью свойства ConnectionString сформировать связные параметры и затем
установить значение True в свойство Connected или вызвать метод Open. Для разрыва связи
выполняется метод Close компонента или в его свойство Connected устанавливается значение False.
До и после открытия и закрытия соединения разработчик может использовать соответствующие стандартные
методы-обработчики событий:
- property BeforeConnect: TNotifyEvent;
- property BeforeDisconnect: TNotifyEvent;
- property AfterConnect: TNotifyEvent;
- property AfterDisconnect: TNotifyEvent;
Кроме этого, компонент TADOConnection имеет дополнительные методы-обработчики.
После получения подтверждения от провайдера о том, что соединение будет открыто,
перед его реальным открытием вызывается метод-обработчик TWillConnectEvent
события OnWillConnect: TWillConnectEvent .
Заголовок этого обработчика может иметь следующий вид:
procedure TForm1.ADOConnection1WillConnect(Connection: TADOConnection; var ConnectionString, UserID, Password: WideString; var ConnectOptions: TConnectOption; var EventStatus: TEventStatus);
Параметр Connection содержит указатель на вызвавший обработчик компонент.
Параметры ConnectionString, userID и Password определяют строку параметров,
имя и пароль пользователя.
Соединение может быть синхронным или асинхронным, что и определяется параметром ConnectOptions
типа TConnectOption:
- coConnectunspecified - синхронное соединение всегда ожидает результат последнего запроса;
- coAsyncConnect - асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от
предыдущих запросов.
Наконец, параметр EventStatus позволяет определить успешность выполнения посланного запроса на соединение:
- esOK - запрос на соединение выполнен успешно;
- esErrorsOccured - в процессе выполнения запроса возникла ошибка;
- esCantDeny - соединение не может быть прервано;
- esCancel - соединение было прервано до открытия;
- esUnwantedEvent - внутренний флаг ADO.
Например, в случае успешного соединения можно выбрать синхронный режим работы компонента:
procedure TForm1.ADOConnection1WillConnect(Connection: TADOConnection; var ConnectionString, UserID, Password: WideString; var ConnectOptions: TConnectOption; var EventStatus: TEventStatus); begin if EventStatus = esOK then ConnectOptions := coConnectunspecified; end;
В свойствах CommandCount и DataSetCount содержится количество соответствующих объектов,
которые обслуживаются данным компонентом. В сочетании со свойствами Commands и DataSets
можно получить доступ к любому интересующему объекту. Например, чтобы открыть соединение
с базой данных всех объектов, обслуживаемых компонентом ADOConnection1, нужно выполнить:
var i : Integer; begin for i:=0 to (ADOConnection1.DataSetCount-1) do ADOConnection1.DataSets[i].Open; end;
С помощью методов GetProcedureNames и GetTableNames можно получить список всех
хранимых процедур и таблиц. Например:
ADOConnection1.Open; ADOConnection1.GetTableNames(ListBox1.Items);
В результате имена всех таблиц базы данных поместятся в список ListBox1.
Важной особенностью компонента TADOConnection является возможность управления с его помощью
транзакциями. Для этого в состав компонента добавлены соответствующие методы и события.
С помощью метода BeginTrans стартует новая транзакция, методы CommitTrans и RollbackTrans
подтверждают или откатывают транзакцию. Разрешается произвольная глубина вложенности транзакций, то есть после
старта одной транзакции может немедленно стартовать следующая и т. д. Транзакция, стартующая с помощью
компонента TADOConnection, разделяется всеми другими связанными с ним компонентами. С помощью
свойства InTransaction программа может определить, завершилась ли ранее начатая транзакция.
Компонент TADOConnection может выполнять команды ADO без помощи других компонентов. Для
этого используется метод Execute:
procedure Execute(const CommandText: WideString; var RecordsAffected: Integer; ExecuteOptions: TExecuteOptions = [eoExecuteNoRecords]);
или
function Execute(const CommandText: WideString; const CommandType: TCommandType = cmdText; ExecuteOptions: TExecuteOptions = []): RecordSet;
Выполнение команды осуществляется процедурой Execute если команда не возвращает набор записей
или одноименной функцией Execute если команда возвращает набор записей.
В таблице 1 перечислены свойства компонента TADOConnection.
Таблица 1.Свойства компонента TADOConnection
Свойство | Описание |
---|---|
property Attributes: TXactAttributes; | Используется для установки транзакционных возможностей компонента, для управления завершением и отменой транзакций. |
property CommandTimeout: Integer; | Указывает количество времени в секундах, после которого команда будет отменена, по умолчанию 30 с. Значение 0 приводит к неограниченному ожиданию. |
property Connected: Boolean; | Указывает активность соединения: True означает соединение открыто, False - закрыто. |
property ConnectionString: WideString; | Используется для указания подробной информации о соединениях с источником данных. |
property ConnectionTimeout: Integer; | Указывает количество времени в секундах, отведенное на установку соединения, по умолчанию 15 с. Значение 0 приводит к неограниченному ожиданию. |
property ConnectOptions: TConnectOption; | Устанавливает тип соединения:
|
property CursorLocation: TCursorLocation; | Указывает местоположение механизма управления курсором.
|
property DefaultDatabase: String; | Служит для указания базы данных, используемой по умолчанию. |
property IsolationLevel: TIsolationLevel; | Применяется для указания уровня изоляции транзакции. Значение, заданное этим свойством, вступает в силу, как только будет инициирована транзакция вызовом метода BeginTrans. Возможные значения:
|
property KeepConnection: Boolean; | Определяет реакцию компонента на неиспользуемое соединение. Если через соединение не подключен ни один активный компонент, свойство KeepConnection в значении True сохраняет соединение открытым. Иначе, после закрытия последнего связанного компонента ADO, соединение закрывается. |
property LoginPromt: Boolean; | Используется для указания того, нужно ли выводить диалоговое окно, предназначенное для ввода идентификатора пользователя и пароля при соединении с базой данных. |
property Mode: TСonnectMode; | Указывает допустимые для данного соединения разрешения на модификацию данных:
|
На следующем шаге мы рассмотрим компонент TADOCommand.