Есть 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;
...
Здравствуйте, _Antares_, Вы писали:
_A_>Есть DLL, в которой реализованы функции работы с базой, в частности вставка строк.
_A_>Использую компоненты IBDatabase, IBTransaction, IBQuery.
_A_>Проблема: при неуспешной вставке строки в базу (например, violation of PRIMARY or UNIQUE KEY constraint или исключение, сгенерированное триггером) зависает программа, вызвавшая функцию из DLL, причем зависает уже после выполнения функции, на выгрузке библиотеки (FreeLibrary). При успешной вставке строки в базу проблемы нет.
Т.е. ты в ДЛЛ передаешь класс?

Тут и не такое может вылезти.
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, _Antares_, Вы писали:
_A_>>Есть DLL, в которой реализованы функции работы с базой, в частности вставка строк.
_A_>>Использую компоненты IBDatabase, IBTransaction, IBQuery.
_A_>>Проблема: при неуспешной вставке строки в базу (например, violation of PRIMARY or UNIQUE KEY constraint или исключение, сгенерированное триггером) зависает программа, вызвавшая функцию из DLL, причем зависает уже после выполнения функции, на выгрузке библиотеки (FreeLibrary). При успешной вставке строки в базу проблемы нет.
DM>Т.е. ты в ДЛЛ передаешь класс?
Тут и не такое может вылезти.
Где в моем сообщении написано, что "в ДЛЛ передаем класс"???
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, _Antares_, Вы писали:
_A_>>Есть DLL, в которой реализованы функции работы с базой, в частности вставка строк.
_A_>>Использую компоненты IBDatabase, IBTransaction, IBQuery.
_A_>>Проблема: при неуспешной вставке строки в базу (например, violation of PRIMARY or UNIQUE KEY constraint или исключение, сгенерированное триггером) зависает программа, вызвавшая функцию из DLL, причем зависает уже после выполнения функции, на выгрузке библиотеки (FreeLibrary). При успешной вставке строки в базу проблемы нет.
DM>Т.е. ты в ДЛЛ передаешь класс?
Тут и не такое может вылезти.
Видимо стоит уточнить, обе приведенные функции находятся в DLL. В приложении вызывается вторая из них.
Здравствуйте, _Antares_, Вы писали:
_A_>Видимо стоит уточнить, обе приведенные функции находятся в DLL. В приложении вызывается вторая из них.
Ага... Тогда смотри
здесь
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, _Antares_, Вы писали:
_A_>>Видимо стоит уточнить, обе приведенные функции находятся в DLL. В приложении вызывается вторая из них.
DM>Ага... Тогда смотри здесь
Спасибо, решение предложенное по ссылке помогло.