Цитата(null56 @ 27.4.2009, 16:11) | Код | if ((QSqlDatabase::database().isOpen() == true) && (index != 0))
|
Ты создаешь соединение в другом потоке, не уверен, что это правильно
|
http://doc.crossplatform.ru/qt/4.5.0/threads.html#threads-and-the-sql-moduleЦитата | Потоки и модуль SQL
Соединение может использоваться только внутри создавшего его потока. Перемещение соединений между потоками и создание запросов в другой поток не поддерживается.
Кроме того, используемые драйверами QSqlDriver сторонние библиотеки могут наложить дополнительные ограничения на использование модуля SQL в многопоточной программе. За дополнительной информацией обращайтесь к руководству по клиенту вашей базы данных.
|
http://habrahabr.ru/blogs/qt_software/52536/
Цитата | Все кто разрабатывают приложения на Qt, рано или поздно сталкиваются с работой с БД в многопоточном окружении.И если невнимательно читать Ассистант, то можно натолкнуться на одни очень интересные грабли....
Описание окружения Рассмотрим типовую проблему. Вы пишите приложение, работающее с бд, при этом вам необходимо обращаться к БД из нескольких потоков (не важно одновременно или нет). Например такое бывает если вы пишите серверную часть некоего приложения или просто у вас есть логгирующий поток с записью в БД.
Описание граблей
Если внимательно читать ассистант (то есть не только описание классов, но и общие статьи), то мы увидим следующую надпись в описании многопоточного программирования под Qt: «Подключение может быть использовано только тем потоком, который его создал....
Объяснение граблей
Таким образом, запланированный нами банальный мутекс на подключение к БД работать к сожалению не будет. Так же (если нам не нужно все время делить подключение между несколькими потоками, а в первой половине работы программы его должен использовать один поток, а потом другой) не будет и работать метод moveToThread(), так хорошо показывающий себя при работе например с сокетами.
Попытка поразмыслить над проблемой
Ок, мы не можем делить одно подключение между несколькими потоками. Но как мы можем обойти эту проблему? Я вижу два пути:
1. Не париться и делать в каждом потоке свое подключение 2. Обратиться к старому доброму паттерну Singleton
|
Ну и дальше можно почитать  |