Как поймать свой RAISEERROR в Delphi

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Nomadic

Плох тот Error, который не мечтает стать General’ом.

procedure TFDMUtils.GeneralError(DataSet: TDataSet; E: EDatabaseError; var

Action: TDataAction);

var

i: Word;

ExtInfo: string;

begin

ExtInfo := »;

if (E is EDBEngineError) then

begin

if (EDBEngineError(E).Errors[0].NativeError = 0) then

begin // Local Error

if EDBEngineError(E).Errors[0].Errorcode = 9732 then

ExtInfo := DataSet.FieldByName(trim(copy(E.Message, 29,

20))).DisplayLabel;

…………………………………

end

else

begin // Remote SQL Server error

ExtInfo := ExtractFieldLabels(DataSet, E.Message);

case EDBEngineError(E).Errors[0].NativeError of

233, 515:

Alert(‘Ошибка’, ‘Hе все поля заполнены ! ‘ ExtInfo);

547:

if (StrPos(PChar(E.Message), PChar(‘DELETE’)) nil) then

Alert(‘Ошибка пpи удалении’,

‘Имеются подчиненные записи, удаление (изменение) невозможно! ‘

ExtInfo)

else if (StrPos(PChar(E.Message), PChar(‘INSERT’)) nil) then

Alert(‘Ошибка пpи вставке’, ‘Отсутствует запись в МАСТЕР-таблице! ‘

ExtInfo)

else if (StrPos(PChar(E.Message), PChar(‘UPDATE’)) nil) then

Alert(‘Ошибка пpи обновлении’,

‘Отсутствует запись в МАСТЕР-таблице! ‘ ExtInfo);

2601:

Alert(‘Ошибка’, ‘Такая запись уже есть!’);

else

Alert(‘Ошибка’, ‘Hеизвестная ошибка, код — ‘

inttostr(EDBEngineError(E).Errors[0].NativeError) ExtInfo);

end;

end;

end;

end;

Этот код был заточен под MSSQL, но не нужно пытаться его использовать, а лучше по этому пpимеpу написать свою процедуру.

{/codecitation}

Добавить комментарий