Thanks, Constantin. Do you know if is it possible to have two QSqlDatabase objects (using SQLite driver, of course), in the same program? I think I will make some tests with its "clone" function.
Francisco 2014-06-25 0:46 GMT-03:00 Constantin Makshin <cmaks...@gmail.com>: > QSqlDatabase::close() closes the database backend connection but leaves > QtSql one intact, i.e. even after close() your QSqlDatabase object > occupies its slot in the [global] list of existing database objects. So > in order to let QSqlDatabase::removeDatabase() do its job you have to > destroy all QSqlDatabase objects referring to that connection. > > Here is a fragment from one of my applications: > > void Application::closeDatabase () > { > QString connectionName = m_db.connectionName(); > > m_db.close(); > m_db = QSqlDatabase(); > QSqlDatabase::removeDatabase(connectionName); > } > > On 06/24/2014 09:25 PM, Francisco Ares wrote: > > Hi, > > > > Before of anything else, thanks to anyone reading this message. I'm > > using Qt 4.8.5 and QtCreator. > > > > I use SQLite for data storage in an embedded system, and that is OK. > > There is a class, named "CDataBase" that holds the "QSqlDatabase" object > > and all of the "QSqlQuery" objects used on this program, and all access > > to the database itself is made through member functions of this class, > > providing a non-SQL interface for the rest of the program. The class has > > an "init" function to receive the database file name: > > > > void CDataBase::init(QString fileName) > > { > > mDB = QSqlDatabase::addDatabase("QSQLITE"); > > mDB.setDatabaseName(fileName); > > mDB.open(); > > ... > > } > > > > Now I need to implement a backup for that data in a removable drive. For > > that, I have created a second "CDataBase" object to handle the backup > > data base file. The objects that use "CDataBase" have means implemented > > to switch from a "CDataBase" object to another one (at least I believe > > so, as I could not test it). > > > > When the program tries open the new object's database connection, the > > program stops (in debug mode) on the first instruction of the "init" > > function; hitting F10, a warning shows up on the program output pane: > > > > QSqlDatabasePrivate::removeDatabase: connection > > 'qt_sql_default_connection' is still in use, all queries will cease to > work. > > > > So, I've implemented a "finish()" member function for this class: > > > > void CDataBase::finish() > > { > > if (mDB.isOpen()) > > { > > mDB.commit(); > > mDB.close(); > > mDB.removeDatabase(mDB.connectionName()); > > } > > } > > > > So, when I try this: > > > > mDataBaseWork->finish(); > > > > > > the same warning message shows up on trying to execute the > > "removeDatabase" instruction. > > > > All the QSqlQueries are temporary, they are all dead at this point. I > > even tried to do: > > > > { > > QSqlQuery query (mDB, query); > > ... > > ... > > query.finish(); > > query.clear(); > > } > > > > And it didn't work as well. > > > > What am I doing wrong? > > > > Thanks again, > > Francisco > > > _______________________________________________ > Interest mailing list > Interest@qt-project.org > http://lists.qt-project.org/mailman/listinfo/interest > >
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest