try
tMyTable.Post;
excepton E : EDBEngineError doif E.Message = 'Key violation' thenbegin
MessageDlgC ('Дублирование записи не допускается.', mtError, [mbOk], 0);
// Я не уверен в том, что это нужно делать:
tMyTable.Cancel;
endelseRaise;
end;
Хорошим примером может служить проект DBERRORS.DPR, расположенный в каталоге
Delphi 2 Demos. Выглядит это примерно так:
Создайте функцию типа этой:
function DBError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
const
eKeyViol = 9729;
var
iDBIError: Integer;
beginif (E is EDBEngineError) thenbegin
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, там много чего есть полезного.
Нарушение уникальности записи в таблице может быть перехвачено с помощью обработчика события TDataSetEditError и функции DBError, которая анализирует ошибку и выводит соответствующее сообщение пользователю.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS