БОЛЬШОЙ FAQ ПО DELPHI



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

Автор: 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у написать свою процедуру.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ