Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 9
1

Возникает ошибка "database not open" при обращении из разных потоков

18.10.2016, 12:37. Просмотров 736. Ответов 5
Метки нет (Все метки)

Здравствуйте, пишу приложение, база хорошо работает всё окей, в некоторых промежутках, приложение работает-работает и фигаг вылетает QSqlQuery::exec database not open;
И естественно всё остальное перестаёт работать.
Соединение открываю 1 раз.
Обращаюсь из разных потоков постоянно.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void PostgreSQL::connect(){
     db = QSqlDatabase::database("test");
     if(!db.isValid()){
          db = QSqlDatabase::addDatabase("test");
          db.setHostName(config_host);
          db.setDatabaseName(config_dbname);
          db.setUserName(config_dbuser);
          db.setPassword(config_dbpassword);
          db.setPort(config_dbport.toInt());
          db.open();
      }
}
 
QSqlQuery* PostgreSQL::query(QString sql){
     QSqlQuery *query;
     query = new QSqlQuery(db);
     query->exec(sql);
     return query
}
И не понятно в чём проблема.
Буду благодарен за помощь !

 Комментарий модератора 
Для оформления С++\Qt кода используйте тег CPPQT.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2016, 12:37
Ответы с готовыми решениями:

Сообщение "Программа неожиданно завершилась" при обращении к экземпляру объекту
Всем доброго здравия! Имеется программа, которая считывает имена каталогов, на основании этих имён...

"QIODevice::read (QFile, "C:/./text.txt"): device not open"
QString filename("C:/.../text.txt"); QFile file(filename); QString data =...

При запуске программы возникает ошибка "Unable to open file 'COS.obj'"
вот текст программы :#include <stdio.h> #include <conio.h> #include <string.h> int main (void)...

Ошибка обращения к бд "Cannot open database requested by the Login"
Создал базу в Visual Studio, использую такую строку для соединения: string conStr = @"Data...

5
6901 / 5966 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
18.10.2016, 16:20 2
Из разных потоков? Может, в этом проблема?
0
183 / 175 / 57
Регистрация: 25.09.2014
Сообщений: 828
18.10.2016, 16:20 3
А ты уверен, что запросы из разных потоков не пытаются работать с одними и теми же данными в таблице одновременно? Не уверен, конечно, но попробуй еще к закрытию соединения с базой и к запросам дебаг какой-нибудь добавить, чтобы убедиться, что ты сам не закрываешь соединение случайно перед выполнением запроса.
0
1437 / 1317 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
18.10.2016, 16:48 4
Цитата Сообщение от Горбаг Посмотреть сообщение
что запросы из разных потоков не пытаются работать с одними и теми же данными в таблице одновременно?
Нельзя использовать одно соединение из разных потоков. В таких ситуациях нужно на каждый поток иметь по своему соединению.
Или писать свой многопоточный драйвер для работы с PostgreSQL
3
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 9
18.10.2016, 16:52  [ТС] 5
Dmitriy_M, нашёл проблему, решил, возникла другая.
Проблема заключалась в том, что ноды не были развёрнуты на тестовом сервере и база выкидывала меня за кривые запросы
Вопрос в другом при выполнении QSqlQuery. В базе не находит строчку, и если он её не находит база возвращает пустое значение, но qt этого не видит и висит на запросе exec().
Что с этим можно сделать ?
Есть какие-нибудь таймауты на выполнение запроса в qt?
0
1437 / 1317 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
18.10.2016, 17:00 6
f00rZik, многокрасочность убрал?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2016, 17:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

При создании нового файла "*.mdb" возникает "ошибка связи с сервером OLE"
При создании нового файла "*.mdb" "ошибка связи с сервером OLE". Выскакивают окна Окно 1...

Возникает ошибка "0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"."
Подскажите, пожалуйста, в чем может быть ошибка и как его исправить? В деструкторе указывает на...

Возникает ошибка при "header("Location:..."
Следующего характера: Warning: Cannot add header information - headers already sent by... ...

При сохранении битмапа возникает такая ошибка: "В GDI+ возникла ошибка общего вида"
помогите пожалуйста при сохранении битмапа возникает такая ошибка: "В GDI+ возникла ошибка общего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.