Topic: Обработка ошибок связанных с базой данных

Данный пример позволяет обработать ошибку, которая возникла непосредственно в базе данных (СУБД).


Например вы установили ограничение UNIQUE для какого либо поля в БД. Когда вы пытаетесь создать запись с дубликатом по данному полю, то получите системную ошибку от СУБД, которую можете перехватить и обработать ее так, как вам необходимо. Пример:

// глобальное события для всех ошибок от СУБД
function OnSQLException(Sender: TObject; Msg: string; SQL: string): boolean;
begin
    // ошибка при выполнении функций SQLExecute или SQLQuery
    if Sender=nil  then
    begin
        result := true; // предотвращает показ системной ошибки
        ShowMessage(Msg); // ваше сообщение об ошибке может быть здесь
    end;

    // ошибка возкнила при выполнении действия кнопки frmEmployee.bSaveEmp
    if Sender = frmEmployee.bSaveEmp then 
    begin
        if Pos('UNIQUE constraint failed', Msg)=1 then // по тексту сообщения узнает тип ошибки.
        begin
            result := True; // предотвращает показ системной ошибки
            MessageBox('Человек с данной фамилией уже присутствует в БД..', 'Error', MB_OK+MB_ICONWARNING);
        end;
    end;
end;



procedure Form1_Button5_OnClick (Sender: string; var Cancel: boolean);
begin
    SQLExecute('INSERT INTO employees (lastname) VALUES ("ivanov")');
end;


procedure Form1_Button6_OnClick (Sender: string; var Cancel: boolean);
var
    Results: TDataSet;
begin
    SQLQuery('INSERT INTO employees (lastname) VALUES ("ivanov")', Results);
end;

Проект с примером:

Post's attachments

Attachment icon OnSQLException.zip 7.33 kb, 75 downloads since 2017-03-20 

Dmitry.