Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Нарушение уникальности записи


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, там много чего есть полезного.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay