property Fields: TFields;

В дальнейшем связь между компонентами на клиенте настраивается именно через это поле. В подчиненном компоненте TCiientDataSet в Инспекторе объектов необходимо выбрать свойство

property DataSetField: TDataSetFieid;

В списке этого свойства вы увидите имя только что созданного поля объектного типа TDataSetFieid. Выберите его и отношение "один-ко-многим" для клиентских наборов данных готово. При этом в компоненте вложенного набора данных автоматически очищаются свойства RemoteServer и ProviderName, т. к. их значения утрачивают значение и компонент оказывается связан только с главным компонентом отношения "один-ко-многим".

Теперь при навигации по записям основного набора данных во вложенном наборе данных автоматически будут появляться связанные записи. Также вы можете использовать все возможности, предоставляемые компонентом TCiientDataSet как для основного, так и для вложенного набора данных.

Дополнительные свойства полей клиентского набора данных

Как известно, все классы полей имеют одного общего предка - класс TFieid. Подробно эти классы рассматриваются в гл. 13. Здесь же остановимся лишь на нескольких дополнительных свойствах полей, которые работают только в режиме кэширования в обычных компонентах, инкапсулирующих набор данных, и в компоненте TCiientDataSet. Причем в компоненте TCiientDataSet реализация этих свойств обеспечена локальным кэшем.

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

Свойство

property CurValue: Variant; возвращает текущее значение поля.

Свойство

property OldValue: Variant;

содержит значение поле, которое было до начала редактирования. Свойство

property NewValue: Variant ;

содержит новое значение, которое может быть присвоено при обработке ошибки сервера методом-обработчиком OnReconcileError (см. ниже).

Обработка ошибок

Особенности использования компонента TCiientDataSet распространяются также и на обработку ошибок. Ведь клиентский набор данных должен реагировать не только на ошибки, возникшие локально, но и на ошибки сохранения изменений на сервере.

В первом случае разработчик может применить стандартные способы. Это использование блоков try. .except или методов обработчиков, унаследованных от класса TDataSet:

О property OnDeleteError: TDataSetErrorEvent;
- вызывается при ошибках удаления записей;
□
property OnEditError: TDataSetErrorEvent;
- вызывается при ошибках редактирования записей;

О property OnPostError: TDataSetErrorEvent; - вызывается при ошибках локального сохранения записей.

Все они используют процедурный тип

type

TDataSetErrorEvent = procedure,(DataSet: TDataSet;
E: EDatabaseError;
var Action: TDataAction) of object;

Здесь, помимо параметров DataSet и E, определяющих соответственно набор данных и тип ошибки, параметром Action можно задать вариант реакции на ошибку:

type TDataAction = (daFail, daAbort, daRetry); daFail - прервать операцию и показать сообщение об ошибке; daAbort - прервать операцию без сообщения об ошибке; daRetry - повторить операцию.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс