Советы по Delphi


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


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



Содержание раздела