Russian Qt Forum

Qt => Базы данных => Тема начата: lex_pc от Январь 15, 2014, 16:18



Название: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: lex_pc от Январь 15, 2014, 16:18
Доброго времени суток господа.
Проблема в том, что получается вот такая ошибка.

Проект имеет следующий вид :

Базовый класс : Base.   Его конструктор Base(QSqlDatabase *db). От него наследуется 4 класса :
A, B, C, D.  Сначала создаю объект класса А, в нём используется подключение к БД, затем удаляю этот объект
( указатель на db в конструкторе явно не удаляется). Создаю объект класса В, однако в нём при использовании
подключения к БД ( db) вылетает ошибка QSqlError(-1, "Driver not loaded", "Driver not loaded").

Нигде явно не освобождаю память, выделенную под db. База данных PostgreSQL 9.0. Qt 5.1.1.



Название: Re: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: Kurles от Январь 15, 2014, 16:39
Драйвер то вообще есть? Что говорит
Код
C++ (Qt)
qDebug() << QSqlDatabase::drivers();
 
?


Название: Re: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: lex_pc от Январь 15, 2014, 17:03
drives :  ("QSQLITE", "QMYSQL", "QMYSQL3", "QPSQL", "QPSQL7")

Kurles, Вы наверное не совсем меня поняли,
Дело в том, что подключение к БД есть,  проблема в том, что одно подключение
не обслуживает несколько объектов разных классов.


Название: Re: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: Kurles от Январь 15, 2014, 17:40
Наверное неправильно используешь это самое соединение. Не обязательно всем классам передавать экземпляр QSqlDatabase, достаточно знать имя этого соединения.
Код
C++ (Qt)
QSqlDatabase db =  QSqlDatabase::addDatabase("QPSQL", "connectionName"); // может быть любым
// ... настройки соединения опущены
db.open(); // если вернуло true - всё ок, можно использовать
 

и в произвольном месте программы можно добраться до соединения с БД подобным образом:
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::database("connectionName");
if (db.isOpen()) {
 QSqlQuery q(db);
 q.prepare("select ...");
 // ...
}
 
 


Название: Re: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: lex_pc от Январь 18, 2014, 13:10
Вот это то, что нужно. Спасибо большое. И всё - таки, почему при передаче возникает ошибка такого рода?


Название: Re: QSqlError(-1, "Driver not loaded", "Driver not loaded")
Отправлено: gil9red от Январь 18, 2014, 13:19
Перед передачей, нужно открыть соединение :)