Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

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

01.01.2007
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;

Автор: Nomadic

Взято с https://delphiworld.narod.ru