Delphi для профессионалов



 

Провайдеры данных


Компонент-провайдер TDataSetProvider представляет собой мост между набором данных сервера приложений и клиентским набором данных. Он обеспечивает формирование и передачу пакетов данных клиентскому приложению и прием от него сделанных изменений (см. рис. 20.2).

Все необходимые операции компонент выполняет автоматически. Разработчику необходимо лишь разместить компонент TDataSetProvider и связать его с набором данных сервера приложений. Для этого предназначено свойство

property DataSet: TDataSet;

Если соединение в клиентском приложении настроено правильно (см. выше), ТО В списке выбора свойства ProviderName компонента TClientDataSet в Инспекторе объектов появляются имена всех компонентов-провайдеров сервера приложений. Если связать клиентский набор данных с компонентом-провайдером, а затем открыть его, в клиентский набор данных будут переданы записи из набора данных сервера приложений, указанного в свойстве DataSet компонента-провайдера TDataSetProvider.

Компонент также содержит свойства, помогающие настроить процесс обмена данными.

Свойство

property ResolveToDataSet: Boolean;

управляет передачей данных от клиента серверу БД. Если оно имеет значение True, все изменения передаются в набор данных сервера приложений, заданный свойством DataSet. Иначе изменения направляются напрямую серверу БД. Если сервер приложений не должен отображать сделанные клиентом изменения, то свойству ResolveToDataSet можно присвоить значение False, что ускорит работу приложения.

Свойство

property Constraints: Boolean;

управляет передачей ограничений серверного набора данных клиентскому. Если свойство имеет значение True, ограничения передаются.

Свойство

property Exported: Boolean;

позволяет использовать в клиентском наборе данных интерфейс IAppServer. Для этого свойство должно иметь значение True.

Параметры компонента-провайдера задаются свойством

type

TProviderOption = (poFetchBlobsOnDemand, poFetchDetailsOnDemand,

poIncFieldProps, poCascadeDeletes, poCascadeUpdates, poReadOnly, poAllowMultiRecordUpdates, poDisablelnserts, poDisableEdits, poDisableDeletes, poNoReset, poAutoRefresh, poPropogateChanges, poAllowCoinmandText, poRetainServerOrder);

TProviderOptions = set of TProviderOption;

Набор параметров свойства задается присвоением элементам значения True.

property Options: TProviderOptions;

poFetchBlobsOnDemand — включает передачу в клиентский набор данных значений полей типа BLOB. По умолчанию эта возможность, отключена для ускорения работы;

poFetchDetailsOnDemand — включает передачу в клиентский набор данных подчиненных записей для отношения "один-ко-многим". По умолчанию эта возможность отключена для ускорения работы;

poIncFieldProps — включает передачу в клиентский набор данных нескольких свойств для объектов полей: Alignment, DisplayLabel, DisplayWidth, Visible, DisplayFormat, EditFormat, MaxValue, MinValue, Currency, EditMask, DisplayValues;

poCascadeDeletes — включает автоматическое удаление подчиненных записей в отношении "один-ко-многим" на стороне сервера, если главная запись была удалена в клиентском наборе данных;

poCascadeUpdates — включает автоматическое обновление подчиненных записей в отношении "один-ко-многим" на стороне сервера, если главная запись была изменена в клиентском наборе данных;

poReadOnly — включает режим "только для чтения" для набора данных сервера;

poAllowMultiRecordUpdates — включает режим внесения изменений сразу в несколько записей одновременно. Иначе все записи изменяются последовательно, одна за одной;

poDisablelnserts — запрещает клиенту вносить в набор данных сервера новые записи;

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

poDisableDeletes — запрещает клиенту удалять записи в наборе данных сервера;

poNoReset — запрещает обновление набора данных сервера перед передачей записей клиенту (перед вызовом метода AS_GetReccrds интерфейса IAppServer);

poAutoRefresh — включает автоматическое обновление записей клиентского набора данных. По умолчанию эта возможность отключена для ускорения работы;

poPropogateChanges — если В методах-обработчиках BeforeUpdateRecord или AfterUpdateRecord клиентского набора данных были сделаны дополнительные изменения, то после их записи в наборе данных сервера, изменения снова направляются клиенту для обновления записи. Во включенном состоянии эта возможность позволяет полностью контролировать сохранение изменений на сервере;

poAllowCommandText — позволяет изменять текст запроса SQL, имена хранимых процедур или таблиц в компоненте набора данных на сервере приложений;

poRetainServerOrder — включает запрет на изменение порядка сортировки записей клиентом. Если этот параметр отключить, возможны ошибки отображения набора данных, проявляющиеся в появлении двойных записей.

Методы-обработчики компонента-провайдера данных представлены в табл. 20.2.

Таблица 20.2. Методы-обработчики событий компонента TDataSetProvider

Объявление

Описание

property Af terApplyUpdates: TRemoteEvent;

Вызывается после сохранения изменений, переданных от клиента, в наборе данных сервера

property AfterExecute: TRemoteEvent;

Вызывается после выполнения запроса SQL или хранимой процедуры на сервере

property AfterGetParams: TRemoteEvent;

Вызывается после того, как компонент-провайдер сформировал набор параметров набора данных сервера для их передачи клиенту

property AfterGetRecords: TRemoteEvent;

Вызывается после того, как компонент-провайдер сформировал пакет данных для передачи набора данных сервера клиенту

property AfterRowRequest: TRemoteEvent ;

Вызывается после обновления текущей записи клиента компонентом-провайдером

property AfterUpdateRecord: TAf terUpdateRecordEvent ;

Вызывается сразу после обновления единичной записи на сервере

property Bef oreApplyUpdates: TRemoteEvent ;

Вызывается перед сохранением изменений, переданных от клиента, в наборе данных сервера

property BeforeExecute: TRemoteEvent;

Вызывается перед выполнением запроса SQL или хранимой процедуры на сервере

property BeforeGetParams: TRemoteEvent ;

Вызывается перед тем, как компонент-провайдер сформировал набор параметров набора данных сервера для их передачи клиенту

property BeforeGetRecords: TRemoteEvent ;

Вызывается перед тем, как компонент-провайдер сформировал пакет данных для передачи набора данных сервера клиенту

property BeforeRowRequest: TRemoteEvent ;

Вызывается перед обновлением текущей записи клиента компонентом-провайдером

property BeforeUpdateRecord: TBeforeUpdateRecordEvent;

Вызывается непосредственно перед обновлением единичной записи на сервере

property OnDataRequest: TDataRequestEvent;

Вызывается при обработке запроса на получение данных клиентом

property OnGetData: TProviderDataEvent;

Вызывается после получения данных от набора данных сервера, но перед их отправкой клиенту

property OnGetDataSetProperties: TGetDSProps;

Вызывается при создании структуры параметров набора данных сервера для их передачи клиенту

property OnGetTableName: TGetTableNameEvent;

Вызывается при получении компонентом-провайдером имени таблицы, подлежащей обновлению

property OnUpdateData: TProviderDataEvent ;

Вызывается при сохранении изменений в наборе данных сервера

property OnUpdateError: TResolverErrorEvent;

Вызывается при возникновении ошибки сохранения изменений в наборе данных сервера