КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
If SaveDialogl.Execute then
Begin Begin Begin ... Begin Label4.Caption:=IntToStr(ClientDataSetl.ApplyUpdates(-1)); end;
При нажатии кнопки Buttoni на сервер приложений пересылаются все изменения, сделанные в приложении клиента. Число ошибок, связанных с пересылкой записей, выводится в надписи Label4.
Пересылка записей и связанное с этим обновление БД может привести к конфликту записей. В этом случае в клиентском наборе данных для каждого такого конфликта генерируется событие OnReconcileError типа TReconcileErrorEvent. Тип события описан как: type TReconcileErrorEvent = procedure(DataSet: TClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction) of object;
Параметр DataSet определяет клиентский набор данных, чье обновление записей привело к конфликту и вызвало исключительную ситуацию, объект которой содержит параметр е. Этот параметр указывает тип операции обновления данных: § usModified — редактирование; § usInserted — вставка; § usDeieted — удаление.
Параметр Action определяет действие, которое должно быть выполнено сервером приложений для устранения ошибки: § raSkip — запись остается в приложении клиента без изменений, т. е. остается в Delta-данных (по умолчанию); § raAbort — операция обновления данных прекращается; § гаMегgе — изменения этого клиента объединяются с изменениями других клиентов; принимаются изменения значений только тех полей, которые не были изменены другими клиентами; § raCorrect — данные, имеющиеся на сервере, заменяются данными этого клиента; данные, поступившие от других клиентов, будут изменены; § raCancel — операция обновления данных прекращается, все изменения удаляются и восстанавливаются первоначальные значения записей; § raRefresh — изменения, сделанные в приложении клиента, сбрасываются и заменяются значениями, имеющимися на сервере.
Для упрощения работы с возникающими ошибками обновления данных удобно использовать стандартный диалог, который добавляется к проекту выбором объекта Reconcile Error Dialog (Диалог устранения ошибок) на вкладке Dialogs Хранилища объектов. Пользователю выводится информация о типе операции обновления данных, описание возникшей ошибки, данные конфликтной записи. Составом выводимых полей управляют два переключателя: § Show conflicting fields only — вывод только конфликтных полей; § Show changed fields only — вывод только измененных полей.
Пользователь определяет направленное на устранение ошибки действие с помощью группы зависимых переключателей Reconcile Action: § Skip — пропуск; § Cancel — отмена; § Correct — подтверждение; § Refresh — обновление; § Merge — объединение.
Выбор переключателя приводит к установке соответствующего значения параметра Action обработчика События OnReconcileError. Рассмотрим следующий пример: // Подключение модуля формы диалога Reconcile Error Dialog uses reUnit; procedure TForml.ClientDataSetlReconcileError(DataSet: TClientDataSet; E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction); Action:=HandleReconcileError(DataSet, UpdateKind, E); end; При возникновении ошибки обновления данных вызывается обработчик события OnReconcileError. Для предоставления пользователю информации о возникшей ошибке и обеспечения возможности реагировать на нее в теле обработчика вызывается функция HandieReconciieError. Возвращаемый функцией результат зависит от действий пользователя и присваивается параметру Action обработчика события OnReconcileError. Чтобы реализовать вызов функции HandieReconciieError, ее модуль должен быть включен В список uses. При возникновении конфликта, связанного с обновлением записи, диалог устранения ошибки имеет вид, показанный на рис. 12.7. При отладке приложения на локальном компьютере конфликт обновления можно вызвать, запустив две копии приложения клиента и выполнив попытку редактирования одной и той же записи. При изменении записей клиентского набора данных имеется возможность отмены изменений без передачи их на сервер приложений. Метод canceiupdates отменяет все изменения, не отправленные на сервер. Так, выполнение процедуры-обработчика procedure TForml.Button2Click(Sender: TObject); ClientDataSetl.CancelUpdates; end;
приводит к тому, что при нажатии кнопки Button2 все изменения, сделанные в приложении клиента, отменяются. Рис. 12.7. Диалог устранения ошибок обновления данных
Метод UndoLastChange (FollowChange: Boolean): Boolean отменяет последнее изменение, независимо от вида изменения: редактирование, вставка или удаление записи. Параметр FollowChange управляет позиционированием указателя текущей записи после выполнения операции отмены. При значении True происходит позиционирование указателя текущей записи на восстановленную запись, а при значении False положение этого указателя не изменяется. В качестве результата функция UndoLastChange возвращает признак успешности выполнения операции отмены изменения: True — операция завершилась успешно, False — операция не выполнена. При организации автономной работы клиента удобно использовать методы LoadFromFile и SaveToFile. Метод LoadFromFile (const FileName: string = ‘ ‘) загружает в клиентский набор данных данные, ранее сохраненные в файле, имя которого указано параметром FileName. Метод SaveToFile (const FileName: string = ''; Format TDataPacketFormat = dfBinary) сохраняет данные в файле с именем FileName. Необязательный параметр Format указывает формат файла: § dfBinary — двоичный файл (по умолчанию); § dfXML — файл формата XML (escape-последовательность); § dfXMLUTF8 — файл формата XML (последовательность UTF8).
Если на диске нужно сохранить все записи набора данных, то с сервера должны быть получены все данные. С этой целью свойству PacketRecords клиентского набора данных следует установить значение -1. Рассмотрим в качестве примера обмен данными с диском: procedure TForml.Button3Click(Sender: TObject); ClientDataSetl.SaveToFile(SaveDialogl.FileName); end; procedure TForml.Button4Click(Sender: TObject);
Дата добавления: 2014-01-07; Просмотров: 373; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |