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.