try tMyTable.Post; except on E : EDBEngineError do if E.Message = 'Key violation' then begin MessageDlgC ('Дублирование записи не допускается.', mtError, [mbOk], 0); // Я не уверен в том, что это нужно делать: tMyTable.Cancel; end else Raise; end;
|
Хорошим примером может служить проект DBERRORS.DPR, расположенный в каталоге
Delphi 2 Demos. Выглядит это примерно так:
Создайте функцию типа этой:
function DBError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); const eKeyViol = 9729; var iDBIError: Integer; begin if (E is EDBEngineError) then begin iDBIError := (E as EDBEngineError).Errors[0].Errorcode; case iDBIError of eKeyViol: begin MessageDlg('Нарушение уникальности записи ', mtWarning, [mbOK], 0); Abort; end; end;
|
Затем для каждой таблицы вашего приложения создайте следующий обработчик
события:
procedure TMainForm.Table1EditError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin DBError(Table1, E, Action); end;
|
Таким образом вы можете перехватить множество ошибок. Смотрите примеры от
Borland, там много чего есть полезного.
|