Доступ к связанным наборам данных и командам ADO
Компонент TADOconnection обеспечивает доступ ко всем компонентам, которые используют его для доступа к хранилищу данных ADO. Все открытые таким образом наборы данных доступны через индексированное свойство:
property DataSets[Index: Integer]: TCustomADODataSet;
Каждый элемент этого списка содержит дескриптор компонента доступа к данным ADO (тип TCustomADODataSet). Общее число связанных компонентов с наборами данных возвращается свойством:
property DataSetCount: Integer;
Для этих компонентов можно централизованно установить тип используемого курсора при помощи свойства:
type TCursorLocation = (clUseServer, clUseClient); property CursorLocation: TCursorLocation;
Значение clUseClient задает локальный курсор на стороне клиента, что позволяет выполнять любые операции с данными, в том числе не поддерживаемые сервером.
Значение 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;
Помимо наборов данных компонент TADOConnection обеспечивает выполнение команд ADO. Команду ADO инкапсулирует специальный компонент TADOCommand, который рассматривается ниже. Все команды ADO, работающие с хранилищем данных через это соединение, доступны для управления через индексированное свойство:
property Commands[Index: Integer]: TADOCommand
Каждый элемент этого списка представляет собой экземпляр класса TADOCommand.
Общее число доступных команд возвращается свойством:
property CommandCount: Integer
Например, сразу после открытия соединения можно выполнить все связанные команды ADO, реализовав таким образом нечто вроде скрипта:
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;