Delphi 3 и создание приложений баз данных

S : = ' '


// Обработка ошибки через Message

IF POS('FOREIGN',E.Message) > 0 THEN

S := 'Нарушение целостности БД. Для старого значения поля TOVAR '

+ 'есть дочерние записи в таблице "Расход" '

ELSE

IF POS('Key violation',E.Message) > 0 THEN

S := 'Нарушение уникальности поля ТОВАР'

ELSE

S := 'Другая ошибка';

ShowMessage (S);

end;

Параметр Е : свойство ErrorCode

Если привести параметр Е к типу EDBEngineError простой операцией приведения типов:



EBDEngineError(Е)

можно воспользоваться свойствами класса EDBEngineError:

property Errors(Index: Integeri: TDBError; -

список ошибок в стеке ошибок Borland Database Engine. Номер первой ошибки 0. Номер последней ошибки равен значению свойства ErrorCount, уменьшенному на 1.

property ErrorCount: Integer; -

содержит общее число ошибок в стеке BDE.

property ErrorCode: DBIResult; -

возвращает код ошибки типа Word.

В каталоге, в котором располагается Delphi, в подкаталоге \DOC\ в файле bde.int определяются коды ошибок, возвращаемые методом ErrorCode. Код ошибки имеет тип Word и обычно определяется как сумма категории ошибки и самой ошибки.

Код категории ошибки можно получить при помощи функции (модуль BDE.pas)

function ErrCat(ErrorCat: Word): Word;

Код ошибки внутри данной категории можно получить при помощи функции (модуль BDE.pas)

function ErrCode(ErrorCode: Word): Word;

Пример

использования:

procedure TForm1.TovaryUpdateError(DataSet: TDataSet; Е:

EDatabaseError;

UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);

var S : String;

PartCat, PartCode : Word;

begin

S:=' '

//обработка ошибки через ErrCode

IF Е is EDBEngineError THEN

WITH EDBEngineError (Е) do begin

PartCat := ErrCat(EDBEngineError(Е).Errors

[ErrorCount - 1].ErrorCode);

PartCode := ErrCode(EDBEngineError(Е).Errors

[ErrorCount - 1].ErrorCode);

IF PartCat = ERRCAT_INTEGRITY THEN

S := 'Нарушение целостности базы';

IF PartCat = ERRCAT_DATACORRUPT THEN

S := 'Физическое разрушение данных';

IF PartCat = ERRCAT_IO THEN

S := 'Ошибка операции ввода-вывода';

{...}

IF PartCat = ERRCAT_OTHER THEN S := 'Ошибка категории ERRCAT_OTHER';

ShowMessage('Произошла ошибка типа = ' + S) ;

END;//with

end;

Свойства OldValue и New Value

При использовании кэшированных изменений доступны следующие свойства компонента Tfield: поле таблицы БД или для серверных СУБД -столбец таблицы БД.

property OldValue: Variant;

Содержит исходное значение поля (столбца), то есть значение, имевшее место до каких-либо изменений. После того, как кэшированные изменения были успешно подтверждены, старое значение поля (столбца) извлечь становится невозможным.

property New Value: Variant;

Содержит новое значение поля (столбца) после внесения в поле каких-либо изменений. В том случае, когда при попытке подтверждения кэшированных изменений происходит ошибка, в обработчике OnUpdateError можно программно скорректировать значение New Value и повторить попытку подтверждения изменений, указав UpdateAction = uaRetry.



Содержание раздела