Студопедия

КАТЕГОРИИ:


Архитектура-(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; Просмотров: 356; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.