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;
Проект с примером: