|
Наборы данных клиентского приложения
Каждый из компонентов 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
означает, что клиенту будет возвращено сообщение о первой
же ошибке.
|