crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> [Qt][MySQL] Класс для работы с базой самопроизвольно удаляется
Ivan.qrt
  опции профиля:
сообщение 25.7.2012, 13:53
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 25.7.2012
Пользователь №: 3466

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток, собственно такая ситуация: создал класс для работы с MySQL с двумя приватными полями :
QSqlDatabse workDB;
QSqlQuery * query;


Инициализирую их в конструкторе, все проходит нормально, workDB.open() возвращает true, создается новый объект QSqlQuery, после чего, почему-то сразу же вызывается деструктор, хотя объект после этого ещё используется, а деструктор никто не вызывал. Если закомментировать деструктор, то соединения просто тихо закрываются.


Собственно код:

http://pastebin.com/qrXXHSyU
http://pastebin.com/xq4C4wxr

http://pastebin.com/iqvUMJDs

Вывод такой

db opened successfull.
query created.
Entering sqlWorker::~sqlWorker() ...
QSqlDatabasePrivate::removeDatabase: connection 'workDB' is still in use, all queries will cease to work.
workDB status : CLOSED
Entering sqlVersion(). Sending query->exec()
Программа неожиданно завершилась.


Платформа : winXP 32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 26.7.2012, 17:58
Сообщение #2





Гости








    


Как минимум query должен быть удален. Кстати нафига он вообще создается на куче ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 27.7.2012, 9:58
Сообщение #3





Гости








    


Смотри внимательнее:
sqlWorker::sqlWorker(const QString& hostName, const QString& dbName, const QString& userName, const QString& pwd)
далее
workDB = QSqlDatabase::addDatabase("QMYSQL", CONNECTION_NAME);
и вывод:
Entering sqlWorker::~sqlWorker() ...
QSqlDatabasePrivate::removeDatabase: connection 'workDB' is still in use, all queries will cease to work.

QSqlDatabase::addDatabase("QMYSQL", CONNECTION_NAME); не может открыть базу по имени CONNECTION_NAME. Эта переменная не задана ранее.
Функция QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) ) [static] не выполняется ввиду отсутствия второго аргумента и происходит вызов деструктора:
Entering sqlWorker::~sqlWorker() ...
QSqlDatabasePrivate::removeDatabase: connection 'workDB' is still in use, all queries will cease to work.

Вроде бы так
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.6.2024, 6:15