Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 27.5.2008, 22:50 |
На счет этого сообщения: QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work. Перевод такой: Цитата QSqlDatabasePrivate::removeDatabase: соединение 'qt_sql_default_connection' по-прежнему находится в использовании, все запросы, перестанут работать. Т.е. это не ошибка а предупреждение. Я тут в своей софтине проверил, ругань идет только в консоль отладки, а в GUI'ях нету - можно игнорить, я так думаю. |
|
ViGOur | Дата 26.5.2008, 20:31 |
Угу, именно так. Просто в данном случае QSqlDatabase является синглтоном, а при вызове: создаются два именованных синглтона, и их можно создать сколько угодно.Работать всеравно, что работаешь с одной БД. В принципе так оно и получается. |
|
Litkevich Yuriy | Дата 26.5.2008, 20:27 |
Таким образом QSqlDatabase::removeDatabase() для перезагрузки драйвера под другой тип базы вызвать не прийдётся. все верно |
|
Arceny | Дата 26.5.2008, 20:25 |
В общем всё понятно. В моей переменной cnf.dbType (QString) как раз и хранится тип драйвера БД - QSQLITE или QPSQL. В таком случае мне будет логичнее создать 2 объекта QSqlDatabase, в первом будет БД типа QSQLITE, во втором - QPSQL. При необходимости изменить хост/имя базы я вызываю db.close(), потом db.set*(), потом db.open() ... Так? Таким образом QSqlDatabase::removeDatabase() для перезагрузки драйвера под другой тип базы вызвать не прийдётся. Нет, модели ещё нет. Модель будет :-) |
|
Litkevich Yuriy | Дата 26.5.2008, 20:24 |
ViGOur, да можно и так как он, открывать/закрывать. Непонятно почему ошибку при закрытии выдает. Arceny, у тебя нигде модели нет связаной с БД, той что из концепции Модель/Представление ? | |
ViGOur | Дата 26.5.2008, 20:16 |
Цитата Первый аргумент QSqlDatabase::addDatabase() - это имя драйвера. Для получения списка драйверов, см. документацию addDatabase(). Для инициализации данных соединения мы вызываем setHostName(), setDatabaseName(), setUserName() и setPassword(). Читаем: Модуль QtSql Так как имя соединения не определено, соединение становится соединением по умолчанию. Для определения имени, передайте его в качестве второго аргумента в QSqlDatabase::addDatabase(). Например: Как только соединение инициализировано, мы должны вызвать QSqlDatabase::open() для открытия бызы данных и получения доступа к данным. Если запрос соединения потерпит неудачу, функция возвратит false; информацию об ошибке можно получить из QSqlDatabase::lastError().Как только соединение установлено, мы можем получить указатель на него из любого места прораммы, вызвав статическую функцию QSqlDatabase::database(). Если мы вызываем данную функцию без параметра, она возвратит указатель на соединение по умолчанию. Если функция вызывается с идентификатором, использованным при установке соединения, она возвратит ссылку на указанное соединение. Например:
Для удаления соединения с базой данных, сначала закройте базу данных с помощью QSqlDatabase::close(), а затем, удалите ее с помощью статического метода QSqlDatabase::removeDatabase(). |
|
Arceny | Дата 26.5.2008, 19:17 |
У меня нет отпкрытых запросов. У меня вообще в моём приложении пока что их нет. БД просто открывается и закрывается (полностью, через QSqlDatabase::removeDatabase). Я вообще вызываю db.close(); перед вызовом removeDatabase, который как написано в документации должен Closes the database connection, freeing any resources acquired, and invalidating any existing QSqlQuery objects that are used with the database. |
|
Litkevich Yuriy | Дата 26.5.2008, 19:04 |
Цитата void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static] Removes the database connection connectionName from the list of database connections. Warning: There should be no open queries on the database connection when this function is called, otherwise a resource leak will occur. |
|
Arceny | Дата 26.5.2008, 18:37 |
А как быть, если я в процессе работы программы хочу открыть новую БД (возможно даже другого типа, например QPSQL)? Пробовал close(),получаю при открытии ругань QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
|
|
Litkevich Yuriy | Дата 17.5.2008, 21:47 |
close() , я предпочитаю закрывать, может Qt и сама может это сделать при закрытии программы, я не вкурсе. | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 27.4.2024, 19:44 |