Свойство

Тип

Пояснение

ErrorCode

Word

Код ошибки, возвращаемый BDE, ADO, dbExpress или иными технологиями

PreviousError

Word

Код предыдущей ошибки в процессе их обработки (если ошибки не было - 0)

Message

string

Текст сообщения

Context

string

Текст дополнительной информации (может быть nil)

Параметр обработчика UpdateKind указывает тип операции, вызвавшей ошибку: икМосШу - изменение записи, икЬдееН, - вставка, икОе^е - удаление.

В параметр Action надо анести результат обработки ошибки:

гавЫр

Пропустить обработку данной записи, т.е. оставить ее в списке незавершенных исправлений

гаАЬоИ

Прервать все операции обработки ошибок

гаМегде

Объединить изменяемую запись с записями сервера (фактически, добавить данную запись как новую)

гаСоггес1

Заменить текущую обновляемую запись записью, сформированной в обработчике события (это случай, когда вы можете исправить ошибку)

гаСапсе1

Отменить все исправления данной записи, вернувшись к первоначальным значениям всех ее полей

гаКе^евЬ

Отменить все исправления данной записи и заменить запись той, которая хранится на сервере

В обработчике события OnReconcileError надо предоставить пользователю всю доступную информацию о возникшей проблеме и дать возможность принять решение. Например, пользователь может изменить значение NewValue соответствующего поля набора Data Set (то значение, которое вызвало ошибку) и задать Action = raCorrect. В этом случае будет сделана попытка занести в базу данных исправленный вариант записи. Пользователь может выбрать Action = raRefresh, т.е. отказаться от сделанных исправлений и согласиться на ту запись, которая находится в данный момент в базе данных. Он может также выбрать Action = raCancel, т.е. отказаться от сделанных исправлений и принять те значения полей, которые были перед началом редактирования. Наконец, пользователь может отказаться временно от принятия решения (Action = raSkip или raAbort) и продолжить работу по редактированию записей.

Ниже приведен пример фрагмента обработчика события OnReconcileError, в котором пользователю сообщается информация о возникшей проблеме. Информация заносится в окно Memol.

procedure TForml.ClientDataSetlReconcileError(

DataSet: TCustomClientDataSet;
E: EReconcileError;
UpdateKind: TUpdateKind;
var Action: TReconcileAction);
var i: integer;
S: string;
F: TField;
begin Memol.Clear();

Memol.Lines.Add('Код ошибки: ' + IntToStr(E.ErrorCode)); Memol.Lines.Add('Прежний код: ' + IntToStr(E.PreviousError)); Memol.Lines.Add('Сообщение: ' + E.Message); if (E.Context <> '')

then Memol.Lines.Add(E.Context); S := 'Операция: '; case UpdateKind of

ukModify: S := S + 'изменение записи';
uklnsert: S := S + 'вставка';
ukDelete: S := S + 'удаление';
end;
Memol.Lines.Add(S);

if(UpdateKind = ukModify)

then for i := 0 to DataSet.FieldCount - 1 do

begin

F := DataSet.Fields.Fields[i];

if (F.FieldKind <> fkData) or

VarlsEmpty(F.NewValue) then continue;
Memol.Lines.Add(11);
Memol.Lines.Add(1 Поле 1 + F.FieldName);

Memol.Lines.Add(1 Прежнее значение: 1 + VarToStr(F.OldValue)); Memol.Lines.Add(1 Записываемое значение: 1 + VarToStr (F.NewValue)); if (not VarlsEmpty(F.CurValue))


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

Приемы программирования в Delphi на основе VCL



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

  • Сентябрь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс