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



 

Наборы данных клиентского приложения


Каждый из компонентов TClientDataSet модуля данных DataModuie связан с соответствующим компонентом-провайдером сервера.

Компонент cdsorders предназначен для просмотра данных о заказах. Вспомогательные компоненты cdsEmpioyees и cdsCustomers содержат списки заказчиков и работников, используемые в главном наборе данных. В компоненте cdsorders определено агрегатное поле Paidsum, рассчитывающее сумму платежей по всем заказам.

Компонент cdsParts предназначен для просмотра и редактирования данных о поступлениях. Компонент cdsvendors представляет список поставщиков. Так как в сервере приложения связанный с cdsvendors набор данных является главным в отношении "один-ко-многим". то одновременно с обычными полями для компонента cdsvendors автоматически создается поле tbiParts типа TDataSetField. Это поле позволяет настроить вложенный набор данных. Для этого достаточно в свойстве DataSetField вложенного компонента cdsParts задать поле tbiParts. Теперь при перемещении по записям главного набора данных cdsvendors вложенный набор данных компонента cdsParts будет отображать записи, связанные с текущим поставщиком.

 Примечание 

В целях сохранения простоты и наглядности исходного кода редактирование предусмотрено только для одного компонента cdsParts. В реальной работе аналогичные методы могут использоваться для всех наборов данных.

Для компонента cdsParts созданы два агрегата, суммирующие данные о поступлениях и продажах. При перемещении по записям этого набора данных в методе-обработчике AfterScroll предусмотрено обновление значений агрегатов (см. листинг 22.1).

Так как компонент cdsParts предназначен и для редактирования данных, то для него необходимо предусмотреть обработку исключительных ситуаций, возникающих не только на клиенте, но и на сервере. Для этого используется метод-обработчик cdsPartsReconclieError (см. листинг 22.1). Сама операция очень проста и скорее служит лишь демонстрацией возможности создавать собственную обработку серверных исключений вместо использования стандартной функции HandleReconclieError (см. рис. 22.4). Здесь все изменения в проблемных записях отменяются методом cancelupdates и выводится сообщение об ошибке.

Локальное редактирование, сохранение или отмена изменений для компонента cdsParts выполняется стандартными методами набора данных (см. гл. 12). Дополнительно при отмене изменений используется метод undoLastchange, позволяющий полностью восстановить последнюю модифицированную запись даже после локального сохранения изменений.

Для передачи изменений серверу использован метод ApllyUpdates. Параметр -1 означает, что клиенту будет возвращено сообщение о первой же ошибке.