Нарушение уникальности записи

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

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

{/codecitation}

Добавить комментарий