Topic: Обработка исключительных ситуаций SQLite

Дмитрий, добрый день!

Проблема такая: решил сделать проверку на уникальность записей в таблице с помощью создания уникального индекса в базе SQLite. Сделал индекс с помощью сторонней программы. Теперь при попытке сохранить запись появляется ошибка "UNIQUE constraint failed". Как можно поставить свой текст для этой ошибки? Например, "Такая запись уже существует.".
Пытаюсь сделать так:

procedure frThemes_btnThemeSave_OnClick (Sender: string; var Cancel: boolean);
begin
  if Pos('UNIQUE constraint failed',ExceptionMessage)>0 then
  begin
    ShowMessage('111');
    Cancel:= True;
  end;
end;

Re: Обработка исключительных ситуаций SQLite

Добавил такую возможность.


Скачайте пожалуйста последнюю бета версию
https://www.dropbox.com/s/xf20ksdbdgj6w … b.zip?dl=0



Создается глобальная функция OnSQLException по перехвату исключений, связанных с базой данных:

// global event for all exceptions related database
function OnSQLException(Sender: TObject; Msg: string; SQL: string): boolean;
begin
    // exception from functions SQLExecute or SQLQuery
    if Sender=nil  then
    begin
        result := true; // to prevent system message
        ShowMessage(Msg); // your message
    end;

    // exception from button frmEmployee.bSaveEmp
    if Sender = frmEmployee.bSaveEmp then // if exception from button frmEmployee.bSaveEmp
    begin
        if Pos('UNIQUE constraint failed', Msg)=1 then
        begin
            result := True; // to prevent system message
            MessageBox('Person already exists.', '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, 360 downloads since 2017-02-07 

Dmitry.