Провайдеры данных
Компонент-провайдер 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 – включает запрет на изменение порядка сортировки записей клиентом. Если этот параметр отключить, возможны ошибки отображения набора данных, проявляющиеся в появлении двойных записей.