Шаг 7.
Технология ADO.
Компонент TADOConnection

    На этом шаге мы рассмотрим компонент TADOConnection.

    Компонент TADOConnection используется для соединения с различными источниками ADO и представляет собой версию объекта ADO Connection для Delphi.

    Применение компонента TADOConnection дает разработчику ряд преимуществ:

    Компонент TADOConnection выполняет роль концентратора соединения с хранилищем данных. Для установления связи нужно с помощью свойства ConnectionString сформировать связные параметры и затем установить значение True в свойство Connected или вызвать метод Open. Для разрыва связи выполняется метод Close компонента или в его свойство Connected устанавливается значение False. До и после открытия и закрытия соединения разработчик может использовать соответствующие стандартные методы-обработчики событий:

    Кроме этого, компонент 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:

    Наконец, параметр EventStatus позволяет определить успешность выполнения посланного запроса на соединение:

    Например, в случае успешного соединения можно выбрать синхронный режим работы компонента:

   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;
Устанавливает тип соединения:
  • coConnectunspecified - синхронное соединение всегда ожидает результат последнего запроса;
  • coAsyncConnect - асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от предыдущих запросов.
property CursorLocation: TCursorLocation;
Указывает местоположение механизма управления курсором.
  • clUseClient - клиентский курсор. Позволяет выполнять любые операции с данными, в том числе не поддерживаемые сервером;
  • clUseServer - серверный курсор. Реализует только возможности сервера, но обеспечивает быструю обработку больших массивов данных.
property DefaultDatabase: String;
Служит для указания базы данных, используемой по умолчанию.
property IsolationLevel: TIsolationLevel;
Применяется для указания уровня изоляции транзакции. Значение, заданное этим свойством, вступает в силу, как только будет инициирована транзакция вызовом метода BeginTrans. Возможные значения:
  • ilUnspecified - уровень изоляции не указан (провайдер использует другой уровень);
  • ilChaos - изменения, сделанные транзакциями с большим уровнем изоляции, не могут быть изменены текущим соединением;
  • ilReadUncommitted (или ilBrowse) - изменения, сделанные незавершенными транзакциями (незафиксированные в БД), сразу же видны в других транзакциях;
  • ilCursorStability (или ilReadCommitted) - изменения, сделанные другими транзакциями, видны только после завершения (фиксации) этих транзакций;
  • ilRepeatableRead - изменения, сделанные другими транзакциями, не видны, но могут быть получены в новом запросе (при обновлении);
  • ilSerializable (или ilIsolated) - транзакции проводятся в полной изоляции от других транзакций.
property KeepConnection: Boolean;
Определяет реакцию компонента на неиспользуемое соединение. Если через соединение не подключен ни один активный компонент, свойство KeepConnection в значении True сохраняет соединение открытым. Иначе, после закрытия последнего связанного компонента ADO, соединение закрывается.
property LoginPromt: Boolean;
Используется для указания того, нужно ли выводить диалоговое окно, предназначенное для ввода идентификатора пользователя и пароля при соединении с базой данных.
property Mode: TСonnectMode;
Указывает допустимые для данного соединения разрешения на модификацию данных:
  • cmUnknown - разрешения еще не установлены или не определены;
  • cmRead - для соединения установлено разрешение "только чтение";
  • cmWrite - установлено разрешение "только запись";
  • cmReadWrite - для соединения установлено разрешение "запись/чтение";
  • cmShareDenyRead - разрешение на чтение для других соединений запрещено;
  • cmShareDenyWrite - разрешение на запись для других соединений запрещено;
  • cmShareExclusive - разрешение на открытие для других соединений запрещено;
  • cmShareDenyNone - открытие других соединений с разрешениями запрещено.

    На следующем шаге мы рассмотрим компонент TADOCommand.




Предыдущий шаг Содержание Следующий шаг