Russian Qt Forum
Сентябрь 30, 2024, 06:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSqlError(-1, "Driver not loaded", "Driver not loaded")  (Прочитано 5669 раз)
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.

« Последнее редактирование: Январь 15, 2014, 16:22 от lex_pc » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Январь 15, 2014, 16:39 »

Драйвер то вообще есть? Что говорит
Код
C++ (Qt)
qDebug() << QSqlDatabase::drivers();
 
?
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
lex_pc
Гость
« Ответ #2 : Январь 15, 2014, 17:03 »

drives :  ("QSQLITE", "QMYSQL", "QMYSQL3", "QPSQL", "QPSQL7")

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

Сообщений: 480



Просмотр профиля
« Ответ #3 : Январь 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 ...");
 // ...
}
 
 
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
lex_pc
Гость
« Ответ #4 : Январь 18, 2014, 13:10 »

Вот это то, что нужно. Спасибо большое. И всё - таки, почему при передаче возникает ошибка такого рода?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Январь 18, 2014, 13:19 »

Перед передачей, нужно открыть соединение Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.166 секунд. Запросов: 23.