Решил сделать консольное приложение, использующее компоненты SQLdb.
И внезапно столкнулся с проблемами, возможно, связанными с плохим пониманием работы компонентного подхода Lazarus. Есть простой код подключения к БД, примерно следующий:
- Код: Выделить всё
function DBConnect(): Boolean;
var
db_path, db_username, db_password: String;
begin
Result := false;
db_path := 'data\db\dbmain.fdb';
db_username := 'SYSDBA';
db_password := 'masterkey';
IBConnection1.DatabaseName := db_path;
IBconnection1.UserName := db_username;
IBconnection1.Password := db_password;
...
try
SQLTransaction1.Active := true;
Result := true;
except
WriteLn('Ошибка подключения к БД!');
ReadLn();
end;
end;
Он вызывает RTE, по-видимому, на строчке
- Код: Выделить всё
IBConnection1.DatabaseName := db_path;
Тот же RTE, типа Access Violation или что-то ещё более непонятное, возникает, если создать оконное приложение с тем же кодом, без использования компонентов SQLdb, размещённых на форме. В обоих случаях я прописывал IBConnection1, SQLQuery1 и т. д. в виде переменных, глобальных или внутри функции.
Если же разместить компоненты на форме, при чем они прописываются автоматом в экземпляре класса формы, то всё работает нормально.
Чего я не понимаю?