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

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;

Затем для каждой таблицы вашего приложения создайте следующий обработчик события:

face="Courier New" size="2"> procedure TMainForm.Table1EditError(DataSet: TDataSet;

E: EDatabaseError; var Action: TDataAction);
begin
DBError(Table1, E, Action);
end;

Таким образом вы можете перехватить множество ошибок. Смотрите примеры от Borland, там много чего есть полезного.

 
« Предыдущая статья   Следующая статья »