- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
TADOConnection
Компонент TADOConnection предназначен для управления соединением с объектами хранилища данных ADO. Он обеспечивает доступ к хранилищу данных компонентам ADO, инкапсулирующим набор данных (см. ниже).
Применение этого компонента дает разработчику ряд преимуществ:
Перед открытием соединения необходимо задать его параметры. Для этого предназначено свойство
которое подробно рассматривалось в разд. "Компонент TADOConnection". Добавим лишь, что набор параметров изменяется в зависимости от типа провайдера и может настраиваться как вручную, так и при помощи специального редактора параметров соединения, который вызывается двойным щелчком на компоненте TADOConnection, перенесенным на форму, или щелчком на кнопке в поле редактирования свойства ConnectionString в Инспекторе объектов. Здесь можно настроить соединение через свойство ConnectionString (радиокнопка Use Connection String) или загрузить параметры соединения из файла с расширением udl (радиокнопка Use Data Link File).
Файл UDL представляет собой обычный текстовый файл, в котором указывается название параметра и через знак равенства его значение. Параметры разделяются точкой с запятой.
Если файл параметров соединения отсутствует, настройку придется осуществлять вручную. Для этого следует нажать кнопку Build. В результате появляется диалоговое окно Data Link Properties, в котором можно настроить параметры соединения вручную. Оно представляет собой четырехстраничный блокнот, позволяющий вам этап за этапом задать все необходимые параметры.
Первая страница Provider позволяет выбрать провайдер OLE DB для конкретного типа источника данных из числа провайдеров, установленных в системе. Здесь вы видите провайдеры не только для серверов БД, но и служб, установленных в операционной системе. Состав элементов управления следующих страниц зависит от типа источника данных, но различается не так уж сильно. Далее практически везде необходимо задать источник данных (имя сервера, базу данных, файл и т. д.), режим аутентификации пользователя, а также определить имя и пароль пользователя.
Следующая страница Connection настраивает источник данных.
На первом этапе требуется выбрать имя сервера из доступных для данного компьютера.
Второй этап определяет режим аутентификации пользователя. Это либо система безопасности Windows, либо собственная система аутентификации сервера. Здесь же надо определить имя и пароль пользователя.
Третий этап предназначен для выбора базы данных сервера.
По окончании настройки источника данных вы можете проверить соединение, нажав кнопку Test Connection.
Страница Advanced задает дополнительные параметры соединения. В зависимости от типа хранилища данных некоторые элементы этой страницы могут быть недоступны.
Список Impersonation level определяет возможности клиентов при подключении в соответствии с полномочиями их ролей. В списке могут быть выбраны следующие значения:
При необходимости список Access permissions задает права доступа к отдельным видам выполняемых операций. В списке можно выбрать следующие значения:
После подтверждения сделанных в диалоге настроек из них формируется значение свойства Connectionstring.
Управление соединением
Соединение с хранилищем данных ADO открывается и закрывается при помощи свойства
илиметодов
и
Метод open является перегружаемым при необходимости использования удаленного или локального соединения. Для удаленного соединения применяется вариант с параметрами UserID и Password.
До и после открытия и закрытия соединения разработчик может использовать соответствующие стандартные методы-обработчики событий:
Кроме этого, компонент TADOConnection имеет дополнительные методы-обработчики. После получения подтверждения от провайдера о том, что соединение будет открыто, перед его реальным открытием вызывается метод
Параметр Connectionсодержит указатель на вызвавший обработчик компонент.
Параметры Connectionstring, userID и Password определяют строку параметров, имя и пароль пользователя.
Соединение может быть синхронным или асинхронным, что и определяется параметром ConnectOptions типа TConnectOption:
coConnectunspecified — синхронное соединение всегда ожидает результат последнего запроса;
coAsyncConnect — асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от предыдущих запросов.
Наконец, параметр Eventstatus позволяет определить успешность выполнения посланного запроса на соединение:
Кстати, параметр синхронности/асинхронности можно также задать при помощи свойства
После открытия соединения для выполнения собственного кода можно использовать метод-обработчик
Здесь, если в процессе открытия соединения возникла ошибка, параметр Eventstatusбудет равен esErrorsOccured, а параметр Errorсодержит объект ошибки ADO.
Теперь перейдем к вспомогательным свойствам и методам компонента TADOConnection, обеспечивающим соединение.
Для ограничения времени открытия соединения для медленных каналов связи используется свойство
задающее время ожидания открытия соединения в секундах. По умолчанию оно равно 15 сек.
Также можно определить реакцию компонента на неиспользуемое соединение. Если через соединение не подключен ни один активный компонент, свойство
в значении True сохраняет соединение открытым. Иначе, после закрытия последнего связанного компонента ADO, соединение закрывается.
При необходимости провайдер соединения ADO определяется напрямую свойством
Имя источника данных по умолчанию задается свойством
Но если этот же параметр указан в строке соединения, то он перекрывает собой значение свойства.
При необходимости прямой доступ к объекту соединения OLE DB обеспечивает свойство
При открытии соединения необходимо вводить имя пользователя и его пароль. Появление стандартного диалога управляется свойством
Без этого диалога для задания данных параметров можно использовать свойство Connectionstring, метод open (см. выше) или метод-обработчик
Свойство
задает доступные для соединения операции:
Компонент TADOconnection обеспечивает доступ ко всем компонентам, которые используют его для доступа к хранилищу данных ADO. Все открытые таким образом наборы данных доступны через индексированное свойство
Каждый элемент этого списка содержит дескриптор компонента доступа к данным ADO (тип TCustomADODataSet). Общее число связанных компонентов с наборами данных возвращается свойством
Для этих компонентов можно централизованно установить тип используемого курсора при помощи свойства
Значение clUseClient задает локальный курсор на стороне клиента, что позволяет выполнять любые операции с данными, в том числе не поддерживаемые сервером.
Значение cIUseServer задает курсор на сервере, который реализует только возможности сервера, но обеспечивает быструю обработку больших массивов данных.
Например:
Помимо наборов данных компонент TADOConnection обеспечивает выполнение команд ADO. Команду ADO инкапсулирует специальный компонент TADOCommand, который рассматривается ниже. Все команды ADO, работающие с хранилищем данных через это соединение, доступны для управления через индексированное свойство
Каждый элемент этого списка представляет собой экземпляр класса TADOCommand.
Общее число доступных команд возвращается свойством
Например, сразу после открытия соединения можно выполнить все связанные команды ADO, реализовав таким образом нечто вроде скрипта:
Однако компонент TADOConnection может выполнять команды ADO самостоятельно, без помощи других компонентов. Дляэтогоиспользуетсяперегружаемыйметод
Выполнение команды осуществляется процедурой Execute (если команда не возвращает набор записей) или одноименной функцией Execute (если команда возвращает набор записей).
Параметр commandText должен содержать текст команды. Параметр RecordsAffected возвращает число обработанных командой записей (если они есть). Параметр
задает условия выполнения команды:
После выполнения команды вызывается метод-обработчик
Объект ошибок ADO
Все ошибки времени выполнения, возникающие при открытом соединении, сохраняются в специальном объекте ADO, инкапсулирующем коллекцию сообщений об ошибках. Доступ к объекту возможен через свойство
Транзакции
Компонент TADOconnection позволяет выполнять транзакции. Методы
обеспечивают начало, фиксацию и откат транзакции соответственно. Методы-обработчики
вызываются после начала и фиксации транзакции. Свойство
позволяет задать уровень изоляции транзакции:
TXactAttribute = (xaCommitRetaining, xaAbortRetaining); property Attributes: TXactAttributes;
задает способ управления транзакциями при их фиксации и откате:
Компонент TADOConnection предназначен для управления соединением с объектами хранилища данных ADO. Он обеспечивает доступ к хранилищу данных компонентам ADO, инкапсулирующим набор данных (см. ниже).
Применение этого компонента дает разработчику ряд преимуществ:
- все компоненты доступа к данным ADO обращаются к хранилищу данных через одно соединение;
- возможность напрямую задать объект провайдера соединения;
- доступ к объекту соединения ADO;
- возможность выполнять команды ADO;
- выполнение транзакций;
- расширенное управление соединением при помощи методов-обработчиков событий.
Перед открытием соединения необходимо задать его параметры. Для этого предназначено свойство
Код:
property ConnectionString: WideString;
Файл UDL представляет собой обычный текстовый файл, в котором указывается название параметра и через знак равенства его значение. Параметры разделяются точкой с запятой.
Код:
[oledb]
Everything after this line is an OLE DB initstring
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Common Files\Borland Shared\Data\DBDEMOS.mdb
Первая страница Provider позволяет выбрать провайдер OLE DB для конкретного типа источника данных из числа провайдеров, установленных в системе. Здесь вы видите провайдеры не только для серверов БД, но и служб, установленных в операционной системе. Состав элементов управления следующих страниц зависит от типа источника данных, но различается не так уж сильно. Далее практически везде необходимо задать источник данных (имя сервера, базу данных, файл и т. д.), режим аутентификации пользователя, а также определить имя и пароль пользователя.
Следующая страница Connection настраивает источник данных.
На первом этапе требуется выбрать имя сервера из доступных для данного компьютера.
Второй этап определяет режим аутентификации пользователя. Это либо система безопасности Windows, либо собственная система аутентификации сервера. Здесь же надо определить имя и пароль пользователя.
Третий этап предназначен для выбора базы данных сервера.
По окончании настройки источника данных вы можете проверить соединение, нажав кнопку Test Connection.
Страница Advanced задает дополнительные параметры соединения. В зависимости от типа хранилища данных некоторые элементы этой страницы могут быть недоступны.
Список Impersonation level определяет возможности клиентов при подключении в соответствии с полномочиями их ролей. В списке могут быть выбраны следующие значения:
- Anonymous — роль клиента недоступна серверу;
- Identify — роль клиента опознается сервером, но доступ к системным объектам заблокирован;
- Impersonate — процесс сервера может быть представлен защищенным контекстом клиента;
- Delegate — процесс сервера может быть представлен защищенным контекстом клиента, при этом сервер может осуществлять другие подключения.
- None — подтверждение не требуется;
- Connect — подтверждение необходимо только при подключении;
- Call — подтверждение источника данных при каждом запросе;
- Pkt — подтверждение получения от клиента всех данных;
- Pkt Integrity — подтверждение получения от клиента всех данных с соблюдением целостности;
- Pkt Privacy — подтверждение получения от клиента всех данных с соблюдением целостности и защита шифрованием.
При необходимости список Access permissions задает права доступа к отдельным видам выполняемых операций. В списке можно выбрать следующие значения:
- Read — только чтение;
- ReadWrite — чтение и запись;
- Share Deny None — полный доступ всем на чтение и запись;
- Share Deny Read — чтение запрещено всем;
- Share Deny Write — запись запрещена всем;
- Share Exclusive — чтение и запись запрещена всем;
- Write — только запись.
После подтверждения сделанных в диалоге настроек из них формируется значение свойства Connectionstring.
Управление соединением
Соединение с хранилищем данных ADO открывается и закрывается при помощи свойства
Код:
property Connected: Boolean;
Код:
procedure Open; overload;
Код:
procedure Openfconst UserlD: WideString; const Password: WideString); overload;
Код:
procedure Close;
До и после открытия и закрытия соединения разработчик может использовать соответствующие стандартные методы-обработчики событий:
Код:
property BeforeConnect: TNotifyEvent;
property BeforeDisconnect: TNotifyEvent;
property AfterConnect: TNotifyEvent;
property AfterDisconnect: TNotifyEvent;
Код:
TWillConnectEvent = procedure(Connection: TADOConnection; var Connectionstring, UserlD, Password: WideString; var ConnectOptions: TConnectOption;
var EventStatus: TEventStatus) of object;
property OnWillConnect: TWillConnectEvent;
Параметры Connectionstring, userID и Password определяют строку параметров, имя и пароль пользователя.
Соединение может быть синхронным или асинхронным, что и определяется параметром ConnectOptions типа TConnectOption:
Код:
type TConnectOption = (coConnectUnspecified, coAsyncConnect);
coAsyncConnect — асинхронное соединение может выполнять новые запросы, не дожидаясь ответа от предыдущих запросов.
Наконец, параметр Eventstatus позволяет определить успешность выполнения посланного запроса на соединение:
- type TEventStatus = (esOK, esErrorsOccured, esCantDeny, esCancel, esUnwantedEvent);
- esOK — запрос на соединение выполнен успешно;
- esErrorsOccured — в процессе выполнения запроса возникла ошибка;
- esCantDeny — соединение не может быть прервано;
- esCancel — соединение было прервано до открытия;
- esUnwantedEvent — внутренний флаг ADO.
Код:
procedure TForml.ADOConnectionWillConnect(Connection: TADOConnection;
var ConnectionString, UserlD, Password: WideString;
var ConnectOptions: TConnectOption;
var Eventstatus: TEventStatus);
begin
if Eventstatus = esOK then ConnectOptions := coConnectunspecified;
end;
Код:
ConnectOptions property ConnectOptions: TConnectOption;
Код:
TConnectErrorEvent = procedure(Connection: TADOConnection; Error: Error;
var Eventstatus: TEventStatus) of object;
property OnConnectComplete: TConnectErrorEvent;
Теперь перейдем к вспомогательным свойствам и методам компонента TADOConnection, обеспечивающим соединение.
Для ограничения времени открытия соединения для медленных каналов связи используется свойство
Код:
property ConnectionTimeout: Integer;
Также можно определить реакцию компонента на неиспользуемое соединение. Если через соединение не подключен ни один активный компонент, свойство
Код:
property KeepConnection: Boolean;
При необходимости провайдер соединения ADO определяется напрямую свойством
Код:
property Provider: WideString;
Код:
property DefaultDatabase: WideString;
При необходимости прямой доступ к объекту соединения OLE DB обеспечивает свойство
Код:
property ConnectionObject: _Connection;
Код:
property LoginPrompt: Boolean;
Код:
type TLoginEvent = procedure(Sender:TObject; Username, Password: string) of object;
property OnLogin: TLoginEvent;
Код:
type TConnectMode = (cmUnknown, cmRead, cmWrite, cinReadWrite, cmShareDenyRead, cmShareDenyWrite, cmShareExclusive, cmShareDenyNone);
property Mode: TConnectMode;
- cmUnknown — разрешение неизвестно или не может быть установлено;
- cmRead — разрешение на чтение;
- cmwrite — разрешение на запись;
- cmReadWrite — разрешение на чтение и запись;
- cmshareDenyRead — разрешение на чтение для других соединений запрещено;
- cmshareoenywrite — разрешение на запись для других соединений запрещено;
- cmShareExciusive — разрешение на открытие для других соединений запрещено;
- cmshareDenyNone — открытие других соединений с разрешениями запрещено.
Компонент TADOconnection обеспечивает доступ ко всем компонентам, которые используют его для доступа к хранилищу данных ADO. Все открытые таким образом наборы данных доступны через индексированное свойство
Код:
property DataSets[Index: Integer]: TCustomADODataSet;
Код:
property DataSetCount: Integer;
Код:
type TCursorLocation = (clUseServer, clUseClient); property CursorLocation: TCursorLocation;
Значение cIUseServer задает курсор на сервере, который реализует только возможности сервера, но обеспечивает быструю обработку больших массивов данных.
Например:
Код:
for i := 0 to ADOConnection.DataSetCount — 1 do
begin
if ADOConnection.DataSets[i].Active = True then ADOConnection.DataSets[i].Close;
ADOConnection.DataSets[i].CursorLocation := clUseClient;
end;
Код:
property Commands[Index: Integer]: TADOCommand
Общее число доступных команд возвращается свойством
Код:
property CommandCount: Integer
Код:
procedure TForml.ADOConnectionConnectComplete(Connection: TADOConnection;
const Error: Error; var EventStatus: TEventStatus);
var i, ErrorCnt: Integer;
begin
if EventStatus = esOK then
for i := 0 to ADOConnection.CommandCount — 1 do
try
if ADOConnection.Commands[i].CommandText <> then
ADOConnection.Commands[i].Execute;
except
on E: Exception do Inc(ErrorCnt);
end;
end;
Код:
function Execute(const CommandText: WideString; ExecuteOptions: TExecuteOptions = []): _RecordSet; overload;
procedure Execute(const CommandText: WideString; var RecordsAffected:
Integer; ExecuteOptions: TExecuteOptions = [eoExecuteNoRecords]);overload;
Параметр commandText должен содержать текст команды. Параметр RecordsAffected возвращает число обработанных командой записей (если они есть). Параметр
Код:
type
TExecuteOption = (eoAsyncExecute, eoAsyncFetch, eoAsyncFetchNonBlocking, eoExecuteNoRecords);
TExecuteOptions = set of TExecuteOption;
- eoAsyncExecute — команда выполняется асинхронно (соединение не будет ожидать окончания выполнения команды, а продолжит работу, обработав сигнал о завершении команды, когда он поступит);
- eoAsyncFetch — команда получает необходимые записи также асинхронно;
- eoAsyncFetchNonBlocking — команда получает необходимые записи также асинхронно, но при этом созданная нить не блокируется;
- eoExecuteNoRecords — команда не должна возвращать записи.
Код:
TWillExecuteEvent = procedure(Connection: TADOConnection;
var CommandText: WideString; var CursorType: TCursorType; var LockType:
TADOLockType; var ExecuteOptions: TExecuteOptions; var EventStatus:
TEventStatus; const Command: _Command;
const Recordset: _Recordset) of object;
property OnWillExecute: TWillExecuteEvent;
Код:
TExecuteCompleteEvent = procedure(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus;
const Command: _Command; const Recordset: _Recordset) of object;
property OnExecuteComplete: TExecuteCompleteEvent;
Все ошибки времени выполнения, возникающие при открытом соединении, сохраняются в специальном объекте ADO, инкапсулирующем коллекцию сообщений об ошибках. Доступ к объекту возможен через свойство
Код:
property Errors: Errors;
Компонент TADOconnection позволяет выполнять транзакции. Методы
Код:
function BeginTrans: Integer;
procedure CommitTrans;
procedure RollbackTrans;
Код:
TBeginTransCompleteEvent = procedure(Connection: TADOConnection;
TransactionLevel: Integer;
const Error: Error; var EventStatus: TEventStatus) of object;
property OnBeginTransComplete: TBeginTransCompleteEvent; TConnectErrorEvent = procedure(Connection: TADOConnection; Error: Error; var EventStatus: TEventStatus) of object;
property OnCornmitTransComplete: TConnectErrorEvent;
Код:
type TIsolationLevel = (ilUnspecified, ilChaos, ilReadUncommitted, ilBrowse, ilCursorStability, ilReadCorranitted, ilRepeatableRead, ilSerializable, illsolated);
property IsolationLevel: TIsolationLevel;
- IlUnspecifed — уровень изоляции не задается;
- Ilichaos — изменения более защищенных транзакций не перезаписываются данной транзакцией;
- IlReadUncommitted — незафиксированные изменения других транзакций видимы;
- IlBrowse — незафиксированные изменения других транзакций видимы;
- IlCursorStability — изменения других транзакций видимы только после фиксации;
- IlReadCommitted — изменения других транзакций видимы только после фиксации;
- IlRepeatableRead — изменения других транзакций не видимы, но доступны при обновлении данных;
- ISerializable — транзакция выполняется изолированно от других транзакций;
- Ilisolated — транзакция выполняется изолированно от других транзакций.
TXactAttribute = (xaCommitRetaining, xaAbortRetaining); property Attributes: TXactAttributes;
задает способ управления транзакциями при их фиксации и откате:
- xaCommitRetaining — после фиксации очередной транзакции автоматически начинается выполнение новой;
- xaAbortRetaining — после отката очередной транзакции автоматически начинается выполнение новой.