Есть DLL, в которой реализованы функции работы с базой, в частности вставка строк.
Использую компоненты IBDatabase, IBTransaction, IBQuery.
Проблема: при неуспешной вставке строки в базу (например, violation of PRIMARY or UNIQUE KEY constraint или исключение, сгенерированное триггером) зависает программа, вызвавшая функцию из DLL, причем зависает уже после выполнения функции, на выгрузке библиотеки (FreeLibrary). При успешной вставке строки в базу проблемы нет.
Вот функция вставки записи
function InsertSQL(ASQL: TIBQuery): integer;
begin
try
ASQL.ExecSQL;
Result:= 0;
except
on E: Exception do
begin
AddProtocol(E.Message);
Result:= -1;
end;
end;
end;
Функция вставки в DLL:
...
dsNew.SQL.Text:= 'insert...';
while ... do
begin
//SetParams
dsNew.Prepare;
if InsertSQL(dsNew) = 0 then
AddProtocol('OK');
enf;
...