по значениям поля набора данных 10 глава




Открытие соединения с сервером БД осуществляется заданием свойству Connected типа boolean значения True. Например, при выполнении приложе­ния это можно сделать с помощью кода:

SQLConnectionl.Connected:= True;

Соответственно закрыть соединение с сервером можно путем задания этому свойству значения False. Названные операции могут быть выполнены также с помощью методов:

procedure Open; procedure Close;

С помощью свойства LoginProm.pt типа boolean выполняется задание необхо­димости (True) или ненужности (False) отображения окна авторизации для вво­да имени пользователя (user_Name) и пароля (Password) при каждой попытке соединения с сервером. В последнем случае эти значения будут браться из фай­ла dbxconnections.ini.

После открытия соединения все компоненты dbExpress, инкапсулирующие на­боры данных и связанные с открытым компонентом SQLConnection, получают доступ к базе данных.

При открытии и закрытии соединения можно воспользоваться любым из дос­тупных событий, например:

property AfterConnect: TNotifyEvent; property AfterDisconnect: TNotifyEvent; property BeforeConnect: TNotifyEvent; property BeforeDisconnect: TNotifyEvent; property OnLogin: TSQLConnectionLoginEvent;

Последнее событие наступает в случае, если свойству LoginPrompt установле­но значение True. Если это свойство имеет значение True, и нет обработки события OnLogin, то пользователю будет предложен стандартный диалог авто­ризации.

Текущее состояние соединения указывает Connectionstate типа TConnectionstate, тип которого описан так:

TConnectionstate = (csStateClosed, csStateOpen, csStateConnecting, csStateExecuting, csStateFetching, csStateDisconnecting);

Указанные в определении типа значения соответствуют следующим состояниям соединения: закрыто, открыто, установление соединения, ожидание исполнения переданного SQL-запроса, получение данных с сервера, завершение соединения.


Глава 9. Технология dbExpress


271


Компонент SQLConnection позволяет выполнять SQL-запросы с помощью сле­дующих функций.

Функция Execute(const SQL: string; Params: TParams; ResultSet: Pointer = Nil): integer; выполняет запрос, определенный значением константы sql с параметрами Params, используемыми в SQL-запросе. Используемые в запро­се параметры должны иметь тот же порядок следования, что и в Params и в инструкции SQL. Если SQL-запрос не содержит параметров, то свойству Params требуется задать значение Nil. Если при выполнении SQL-запроса возвращается результат, то в параметр ResultSet помещается указатель на объект типа TCustomSQLDataSet, содержащий результат.

При отсутствии в запросе параметров и возвращаемых записей рекомендуется ис­пользовать функцию ExecuteDirect(const SQL: string): Integer;, которая возвращает значение 0 при успешном завершении запроса или код ошибки в про­тивном случае.

Подобно своим аналогам в BDE (см. главу 7) компонент SQLConnection позво­ляет выполнять запуск, фиксацию и откат транзакций соответственно с помо­щью методов: StartTransaction, Commit И Rollback.

Компоненты доступа к данным

Как отмечалось, ряд компонентов доступа к данным по технологии dbExpress (SQLDataSet, SQLQuery, SQLStoredProc и SQLTable) принадлежит к однона­правленным наборам данных, в которых отсутствует буферизация и при этом на них накладываются заметные ограничения.

В однонаправленных наборах данных используются однонаправленные курсоры. С их помощью допускается только получать данные, из методов навигации по набору данных поддерживаются лишь методы First и Next, подразумевающие последовательный перебор записей от начала к концу.

При использовании однонаправленных наборов данных отсутствует возмож­ность прямого редактирования данных, т. к. для этого нужно размещение в буфере результатов редактирования. При этом соответствующее свойство на­званных компонентов (canModify) всегда имеет значение False. Для однона­правленных наборов данных возможности редактирования данных все же дос­тупны, например, путем задания оператора update языка SQL. Кроме того, для однонаправленных наборов данных по тем же причинам имеют место ограниче­ния по выполнению фильтрации. Это ограничение также можно обойти путем указания параметров фильтрации в SQL-запросах.

Имеются также ограничения по отображению данных с помощью компонентов страницы Data Controls. В частности, нельзя использовать компоненты DBGrid и DBCtrlGrid, а также компоненты синхронного просмотра. Для компонента навигатора требуется отключить кнопки возврата на последнюю запись и пере­хода на последнюю запись. Остальные компоненты можно использовать как обычно.


272 Часть II. Технологии доступа к данным

Для компонента simpleDataSet большинство из указанных ограничений не действует. Он использует внутренние компоненты типа TSQLDataSet и TDataSetProvider для получения и изменения данных.

Перед использованием любой из указанных компонентов доступа к дан­ным следует подключить к серверу БД. Для этого достаточно его свойству SQLConnection в качестве значения установить имя компонента соединения

SQLConection.

Компоненты доступа к данным можно использовать, поместив в форме, либо динамически — создав при выполнении приложения.

Универсальный доступ к данным

Для обеспечения универсального однонаправленного доступа к данным БД по технологии dbExpress служит компонент SQLDataSet. Он позволяет получать все записи из таблицы БД, производить выборку данных путем выполнения SQL-запросов или выполнять хранимые процедуры.

Для определения типа выполняемых действий (с запросами, таблицами или хранимыми процедурами) свойству CommandType рассматриваемого компонента нужно установить соответственно одно из трех возможных значений:

□ ctQuery — в свойстве CommandText указывается SQL-запрос;

□ ctTable — в свойстве CommandText указывается имя таблицы на сервере БД, при этом компонент автоматически генерирует SQL-запрос для получения всех записей для всех полей таблицы;

□ ctstoredProc — в свойстве CommandText указывается имя хранимой про­цедуры.

В случае выбора значения ctQuery текст SQL-запроса можно ввести в поле свойства CommandText с помощью Инспектора объектов или редактора построе­ния запроса commandTextEditor (рис. 9.3). В списке Tables доступны имена таблиц в базе данных, а в списке Fields — имена полей выбранной таблицы. С помощью кнопок Add Table to SQL и Add Field to SQL можно добавить нуж­ные таблицы и поля. При этом в поле SQL отображается автоматически сфор­мированный SQL-запрос. После нажатия ОК в окне редактора мы получаем нужное значение свойства CommandText.

При выполнении приложения аналогичные действия (как на рис. 9.3) для вы­полнения SQL-запроса можно задать так:

SQLDataSetl.CommandType:= ctQuery;

SQLDataSetl.CommandText:= 'select COUNTRY, CURRENCY from DEPARTMENT, DEPT_NO, DEPARTMENT from COUNTRY ';

SQLDataSetl.ExecSQL;


Глава 9. Технология dbExpress


273


При выборе значения ctTable в свойстве CommandText указывается просто имя таблицы, например, так:

SQLDataSetl.CommandType:= ctTable; SQLDataSetl.CommandText: = 'COUNTRY'; SQLDataSetl.ExecSQL;

Для открытия набора данных нужно установить значение True свойству Active или использовать метод open. Если же SQL-запрос или хранимая процедура не возвращают набор данных, для их выполнения используется метод

function ExecSQL(ExecDirect: Boolean = False): Integer; override;

Параметр ExecDirect определяет необходимость подготовки параметров перед выполнением инструкции. Если параметры запроса или процедуры существуют, параметр ExecDirect должен иметь значение False.

При необходимости сортировки данных используют инструкцию order by в случае варианта ctQuery, либо устанавливают с помощью редактора SortFields Editor значение свойства sortFieidNames в случае варианта ctTable. Для вари­анта ctstoredProc порядок сортировки определяется в хранимой процедуре.

При необходимости в SQL-запросе или в хранимой процедуре можно использо­вать параметры, позволяющие настраивать запрос или процедуру, не изменяя их код (см. главу 8). Параметры задаются с помощью свойства Pa rams, которое яв­ляется коллекцией объектов типа т Pa ram.

Свойство DataSource типа TDataSource компонента SQLDataSet позволяет свя­зать два набора данных по схеме "мастер-детальный" (см. главу 2).

Метод Setschemainfo компонента SQLDataSet позволяет получить метаданные (список таблиц на сервере, список системных таблиц, информация о хранимых процедурах, информация о полях таблицы, параметры хранимой процедуры).


274


Часть II. Технологии доступа к данным


Рассмотрим пример формы (рис. 9.4) приложения БД, в котором с помощью компонентов SQLDataSet выполняется доступ к данным по технологии dbExpress. Пусть требуется обеспечить возможность просмотра и редактирования полей данных 'cust_no', 'customer' и 'phone_no' таблицы customer, принад­лежащей базе данных EMPLOYEE.GDB сервера InterBase.

Рис. 9.4. Вид формы при разработке

Код модуля формы для решения поставленной задачи имеет вид:

unit UnitSQLDataSet;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DBXpress, FMTBcd, DB, SqlExpr, StdCtrls, Mask, DBCtrls;

type

TForml = class(TForm)

SQLConnectionl: TSQLConnection; SQLDataSetl: TSQLDataSet; DataSourcel: TDataSource; Labell: TLabel; Label2: TLabel; Buttonl: TButton; Button2: TButton; Button3: TButton;


Глава 9. Технология dbExpress


275


SQLQueryl: TSQLQuery;

SQLDataSet2: TSQLDataSet;

Editl: TEdit;

Edit2: TEdit;

Edit3: TEdit;

procedure SQLDataSetlAfterScroll(DataSet: TDataSet);

procedure ButtonlClick(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end;

var

Forml: TForml;

implementation

{$R *.dfm}

procedure TForml.SQLDataSetlAfterScroll(DataSet: TDataSet);

begin

Editl.Text:=SQLDataSetl.FieldByName('CUST_NO').AsString;

Edit2.Text:=SQLDataSetl.FieldByName('CUSTOMER').AsString;

Edit3.Text:=SQLDataSetl.FieldByName('PHONE_NO').AsString;

end;

procedure TForml.ButtonlClick(Sender: TObject);

begin

SQLDataSetl.First;

end;

procedure TForml.Button2Click(Sender: TObject); begin

SQLDataSetl.Next; end;

procedure TForml.Button3Click(Sender: TObject);

begin

with SQLDataSet2 do


276


Часть II. Технологии доступа к данным


try

CommandText:= 'UPDATE CUSTOMER SET CUST_NO =:Cust_no, CUSTOMER:Customer, PHONE_NO =: Phone_no WHERE CUST_NO =:CUST_NO';

Params[0].AsString:= Editl.Text;

Params[1].AsString: = Edit2.Text;

Params[2].AsString:= Edit3.Text;

ExecSQL;

except

MessageDlg('Customer info fixed error',mtError,[mbOK],0);

end;

end;

end.

Для просмотра и редактирования трех указанных полей таблицы customer ис­пользуются два компонента SQLDataSetl и SQLDataSet2 соответственно. Оба компонента подсоединены к таблице сервера InterBase через компонент SQLConnectionl. Первый компонент SQLDataSetl служит для просмотра запи­сей таблицы customer. Второй компонент SQLDataSet2 служит для фиксации внесенных изменений (три компонента типа TEdit) в текущую запись в таблице на сервере БД.

Для заполнения компонентов типа TEdit при навигации по набору данных ис­пользуется обработчик события Af teScroll для компонента SQLDataSetl. На­вигация по набору данных выполняется с помощью обработчиков событий Onclick для кнопок с заголовками First и Next. Фиксация внесенных в просмат­риваемую запись изменений в таблице на сервере осуществляется с помощью SQL-запроса update, размещенного в обработчике события onclick для кнопки с заголовком Update. В параметрах запроса передаются текущие значения полей из компонентов Editl, Edit2 и Edit3 (рис. 9.5).


Глава 9. Технология dbExpress


277


Отметим, что необходимость использования компонента SQLDataSet2 для фик­сации внесенных изменений в таблице на сервере вызвано тем, что компонент SQLDataSetl является однонаправленным набором данных. Заметим также, что в нашем примере нельзя вместо компонентов Edit использовать компоненты DBEdit, т. к. здесь они не позволяют выполнять редактирование содержимого полей.

Просмотр таблиц

Для просмотра таблиц по технологии dbExpress служит компонент SQLTabie. Компонент SQLTabie генерирует SQL-запрос для получения всех строк и полей указанной таблицы.

Имя таблицы определяется с помощью свойства TabieName, и при подключении компонента к соединению его можно выбрать в комбинированном списке в ок­не Инспектора объектов.

Для получения табличного набора данных компонент SQLTabie с помощью ме­тода

procedure PrepareStatement; override; генерирует запрос на сервер БД.

Порядок следования данных в наборе определяется свойством indexFieidNames типа String ИЛИ IndexName типа String.

Список индексов таблицы можно получить с помощью метода GetmdexNames (List: TStrings) в качестве значения параметра List.

Связь между двумя наборами данных "главный-подчиненный" устанавливается с помощью свойств MasterFieids и MasterSource. На этапе разработки прило­жения двойным щелчком на свойстве MasterFieids в окне Инспектора объек­тов можно открыть диалоговое окно редактора связей для визуального построе­ния отношения "мастер-детальный".

Компонент SQLTabie является однонаправленным курсором, тем не менее, он допускает удаление записей из таблицы на сервер БД с помощью метода

DeleteRecords.

Выполнение SQL-запроса

Для выполнения SQL-запроса на сервере БД служит компонент SQLQuery. Он позволяет представлять результаты выполнения запросов с помощью инструк­ции select или осуществлять действия по изменению БД путем выполнения

ИНСТРУКЦИЙ INSERT, DELETE, UPDATE, ALTER TABLE И Т. П.

Для компонента SQLQuery текст SQL-запроса определяется как значение свойства sql типа TStrings. На этапе разработки приложения текст SQL-запроса может быть набран непосредственно в окне редактора строк (или ре-


278


Часть II. Технологии доступа к данным


дактора кода), открываемого двойным щелчком на свойстве sql в окне Ин­спектора объектов.

При выполнении приложения очистка содержимого свойства SQL компонента SQLQuery и его модификация могут быть выполнены, к примеру, с помощью следующего кода:

SQLQueryl.SQL.Clear;

SQLQueryl.SQL.Add('SELECT ' + Editl.Text + ' FROM ' + Edit2.Text);

if Length(Edit3.Text) <> 0 then

SQLQueryl.SQL.Add('ORDER BY ' + Edit3.Text)

Свойство Text типа string в качестве значения содержит строковое представле­ние SQL-запроса в виде одной строки, а не нескольких, как это может быть в случае свойства sql.

Свойство Active типа Boolean определяет, открыт набор данных или нет. Это свойство обычно используют, чтобы определить или установить заполнение на­бора данными.

Открыть набор данных SQL-запроса также можно с помощью метода Open, ли­бо с помощью метода

function ExecSQL(ExecDirect: Boolean = False): Integer; override;

Здесь значение False параметра ExecDirect означает, что запрос не имеет на­страиваемых параметров.

Свойство DataSource связывает набор данных SQL-запроса с другим (главным) набором данных. Этот набор данных используется для получения параметров запроса в случае, когда предусматривается параметризованный запрос, но при­ложение этими параметрами не обеспечивает.

Выполнение хранимых процедур

Для выполнения хранимых процедур, размещенных на сервере БД, служит компонент SQLStoredProc.

Имя хранимой процедуры задает свойство storedProcName типа string. Для зада­ния параметров хранимой процедуры предназначено свойство Params типа TParams. При обращении к параметрам хранимой процедуры целесообразно ис­пользовать метод ParamByName. Это обусловлено тем, что при работе с некоторы­ми серверами порядок следования параметров до и после выполнения процедуры может меняться.

Для подготовки хранимой процедуры к выполнению на сервере служит метод PrepareStatement(var RecordsAffected: Integer): TCustomSQLDataSet;. При его вызове сервером БД выделяются ресурсы и связываются их параметры. Поиме­нованные параметры временно преобразуются к непоименованным параметрам, поскольку dbExpress поименованные параметры не поддерживает.


Глава 9. Технология dbExpress


279


Если хранимая процедура не возвращает набор данных, то ее запускают с по­мощью метода

function ExecProc: Integer; virtual;

В противном случае используется метод Open либо свойству Active задают зна­чение True.

Компонент редактирования набора данных

Для редактирования набора данных (получения данных, их кэширования и от­правления измененных данных на сервер) предназначен компонент SimpleDataSet. Этот компонент использует двунаправленный курсор и позво­ляет редактировать данные, но в режиме редактирования. Тем самым он ис­правляет основные недостатки рассматриваемой технологии.

Для подготовки компонента SimpleDataSet к работе с данными нужно с помо­щью свойства Connection связать его с компонентом соединения SQLConnection. В качестве альтернативы можно с помощью подсвойства ConnectionName свой­ства Connection задать тип соединения непосредственно.

Произведенные над данными изменения размещаются в локальном кэше, в свя­зи с этим для подтверждения изменений и отправки данных на сервер БД ис­пользуют метод

function ApplyUpdates(MaxErrors: Integer); Integer; virtual;

Здесь параметр метода определяет число ошибок, допустимых при передаче данных.

Локальный кэш компонента после сохранения изменений на сервере можно очистить от данных с помощью метода

function Reconcile(const Results: OleVariant): Boolean;

Отмена локальных изменений данных может быть выполнена с помощью метода

procedure CancelUpdates;.

Пересылка данных между сервером и рассматриваемым компонентом осуществляется с помощью пакетов. Размер пакета (по числу записей) можно задать с помощью свойства PacketRecords типа integer. Iо умолчанию уста­навливается значение — 1, которое означает, что один пакет должен содержать все записи набора данных.

Если значение свойства PacketRecords больше 0, то оно определяет число за­писей, которые можно получить в пакете от провайдера с помощью метода

function GetNextPacket: Integer;

Если значение свойства PacketRecords равно 0, то в пакете передаются только метаданные.

Свойство DataSize типа integer устанавливает размер (в байтах) текущего пакета, доступного с помощью свойства Data типа OleVariant.


280


Часть II. Технологии доступа к данным


На общее число записей в источнике данных указывает свойство RecordCount типа integer, номер текущей записи определяет свойство RecNo типа integer.

Изменения в текущей записи можно отменить с помощью метода

procedure RevertRecord;

Отменить последнюю операцию по изменению клиентского источника данных можно с помощью метода

function UndoLastChange(FollowChange: Boolean): Boolean;

Здесь значение параметра определяет, где будет установлен курсор после вос­становления записи: True — на восстановленной записи, False — на текущей записи.

Обновить значение полей для текущей записи с сервера можно с помощью ме­тода RefreshRecord.

Рассмотрим пример формы (рис. 9.5) приложения БД, в котором с помощью компонента simpieDataSeti выполняется доступ к данным по технологии dbExpress. Пусть требуется обеспечить возможность просмотра и редактирования записей таблицы department, принадлежащей базе данных EMPLOYEE.GDB сервера InterBase.

Код модуля формы для решения поставленной задачи имеет вид:

unit UnitSimpleDataSet;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, FMTBcd, DBXpress, DB, SqlExpr, ExtCtrls, DBCtrls, Grids,

DBGrids, DBClient, SimpleDS;


Глава 9. Технология dbExpress


281


type

TForml = class(TForm)

SimpleDataSetl: TSimpleDataSet;

SQLConnectionl: TSQLConnection;

DBGridl: TDBGrid;

DataSourcel: TDataSource;

DBNavigatorl: TDBNavigator;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure SimpleDataSetlAfterPost(DataSet: TDataSet); private

{ Private declarations } public

{ Public declarations } end;

var

Forml: TForml;

implementation

{$R *.dfm}

procedure TForml.FormCreate(Sender: TObject);

begin

SimpleDataSetl.Open;

end;

procedure TForml.FormDestroy(Sender: TObject); begin

SimpleDataSetl.Active:=False; end;

procedure TForml.SimpleDataSetlAfterPost(DataSet: TDataSet); begin

SimpleDataSetl.ApplyUpdates(-1); end; end.

Dомпонент SimpleDataSetl работает в табличном режиме. При разработке фор­мы подсвойству commandType свойства DataSet задано значение ctTabie, с помощью подсвойства commandText указано имя таблицы department.


282


Часть II. Технологии доступа к данным


Для отображения записей редактируемого набора данных и навигации по нему

ИСПОЛЬЗУЮТСЯ КОМПОНеНТЫDBGridl И DBNavigatorl Соответственно. ФиКСЭЦИЯ

внесенных при редактировании изменений и отправка данных на сервер осуще­ствляются в обработчике события After Post, возникающего при нажатии кноп­ки Post (утвердить результат изменения записи) компонента DBNavigatorl и при переходе в компоненте DBGridl на другую строку (см. главу 6).

Отладка соединения с сервером

Для получения информации о местах ошибок в SQL-запросах при отладке со­единения приложения с сервером БД служит компонент SQLMonitor. Он осуще­ствляет перехват сообщений между соединением и сервером баз данных и по­мещает ИХ В СПИСОК СТрОК, определяемый СВОЙСТВОМ TraceList ТИПа TStrings.

Для начала работы с компонентом нужно установить связь с соединением через свойство SQLConnection и активизировать его, задав свойству Active значение

True.

Перед каждой записью сообщений в список строк возникает событие оптгасе типа

TTraceEvent = procedure(Sender: TObject; CBInfo: pSQLTRACEDesc; var LogTrace: Boolean) of object;

а сразу после записи в список возникает событие onLogTrace типа

TTraceLogEvent = procedure (Sender: TObject; CBInfo: pSQLTRACEDesc) of object;

Содержимое списка можно сохранить в файле на жестком диске с помощью

метода SaveToFile.

При задании свойству AutoSave типа Boolean значения True данные о прохо­дящих командах автоматически заносятся в текстовый файл с именем, заданным значением свойства FileName типа string.

Свойство MaxTraceCount типа integer определяет максимальное число контролируемых команд, а также управляет процессом контроля. При значении — 1 ограничения снимаются, а при значении 0 контроль не выполняется.

На число сохраненных в списке команд указывает свойство TraceCount типа Integer.

Рассмотрим следующий пример: пусть требуется выполнять оперативное ото­бражение информации о последнем сообщении в окне многострочного редакто­ра (компонент memol).

Для решения названной задачи подходит следующий код:

procedure TForml.SQLMonitorlLogTrace(Sender: TObject; CBInfo: pSQLTRACEDesc); var LogFileName: string;


Глава 9. Технология dbExpress


283


begin

with Sender as TSQLMonitor do begin

memol.Lines.Clear;

memol.Lines:=TraceList;

TraceList.Clear; {очистка списка сообщений} end;

end;

Как видно из приведенного кода, мы использовали обработчик события

OnLogin.

(_____ ЗамечаниеJ

Для автономного dbExpress-приложения нужны две динамически подключаемые библиотеки (DLL). Первая библиотека содержит драйвер dbExpress, например, для сервера БД InterBase это dbexpint.dll (см. табл. 9.1). Вторая библиотека есть midas.dll, используемая для поддержки компонента SimpleDataSet. Обе библио­теки могут быть откомпилированы вместе с проектом и включены в ехе-файл рас­пространяемого приложения.

При использовании компонента SimpleDataSet в приложении Delphi может возни­кать ошибка, сопровождаемая сообщением: "Error loading Midas.dll". Возможной при­чиной ее появления является неправильная регистрация названной библиотеки в среде операционной системы. Для выполнения регистрации библиотеки Midas.dll с целью устранения этой ошибки при работе под управлением Windows 2000 доста­точно запустить на выполнение утилиту regsvr32.exe. Обычно она размещается в системном каталоге Windows, например, \winnt\system32.



Глава 10


ТехнологияADO

Общая характеристика

Технология Microsoft ActiveX Data Objects (ADO) представляет собой универсаль­ный механизм доступа к различным источникам данных из приложений баз дан­ных. Основу технологии ADO составляет использование набора интерфейсов об­щей модели объектов СОМ, описанных в спецификации OLE DB. Достоинством этой технологии является то, что базовый набор интерфейсов OLE DB имеется в каждой современной операционной системе Microsoft. Отсюда следует простота обеспечения доступа приложения к данным. При применении технологии ADO (рис. 10.1) приложение БД может использовать данные из электронных таблиц, таблиц локальных и серверных баз данных, XML-файлов и т. д.

В соответствии с терминологией ADO, любой источник данных (базу данных, файл, электронную таблицу) называют хранилищем данных. Приложение взаимо­действует с хранилищем данных с помощью провайдера. Для каждого типа хра­нилища данных используется свой провайдер ADO. Провайдер обеспечивает обращение к данным хранилища с запросами, интерпретацию возвращаемой служебной информации и результатов выполнения запросов для передачи их приложению.

Все объекты и интерфейсы ADO являются объектами и интерфейсами СОМ. Со­гласно спецификации OLE DB, в состав СОМ входит следующий набор объектов:

Command (команда) — служит для обработки команд (обычно SQL-запросов);

Data Source (источник данных) — используется для связи с провайдером данных;


Глава 10. Технология ADO


285


П Enumerator (перечислитель) — служит для перечисления провайдеров ADO;

Error (ошибка) — содержит информацию об исключениях;

Rowset (набор рядов) — строки данных, являющиеся результатом выполнения команды;

Session (сессия) — совокупность объектов, обращающихся к одному храни­лищу данных;

Transaction (транзакция) — управление транзакциями в OLE DB.

Мы привели состав объектов СОМ, чтобы получить общую картину о техноло­гии ADO. В Delphi некоторые из этих объектов получили реализацию, и при необходимости мы будем рассматривать более подробно отдельные понятия.

В системе программирования Delphi компоненты, используемые для создания приложений по технологии ADO, расположены на странице ADO Палитры ком­понентов (см. главу 2). Охарактеризуем кратко назначение этих компонентов:

□ ADOConnection — ADO-соединение, используется для установки соединения с ADO-источником данных и обеспечивает поддержку транзакций;

□ ADOCommand — ADO-команды, используется для выполнения SQL-команд доступа к ADO-источнику данных без возвращения результирующего набора данных;

□ ADODataSet — набор данных ADO, обеспечивает доступ к одной или более таблице ADO-источника данных и позволяет другим компонентам управлять этими данными, связываясь с компонентом ADOTable через компонент DataSource аналогично тому как используется компонет DataSet. Может

использоваться в компонентах ADOTable, ADOQuery, ADOStoredProc;

□ ADOTable — таблица ADO, обеспечивает доступ к одной таблице ADO-источника данных и позволяет другим компонентам управлять этими данны­ми, связываясь с компонентом ADOTable через компонент DataSource;



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: