Sunday, 15 July 2012

c++ - QSqlDatbase is closed before the query finishes -



c++ - QSqlDatbase is closed before the query finishes -

i trying implement database object application, became nightmare when started using multiple connections. below, can see database c++ class code:

// here declarations qstring server_addr; qstring username; qstring password; qstring database_name; qsqldatabase connection; qstring error; qstring connectionname; qsqlquery m_query; // , here definitions database::database(qstring connectionname) { preferences p; p.read(); qstring iconnectionname = (connectionname == "") ? default_connection_name : connectionname; this->connectionname = iconnectionname; if (qsqldatabase::contains(iconnectionname)) this->connection = qsqldatabase::database(iconnectionname); else this->connection = qsqldatabase::adddatabase("qmysql", iconnectionname); this->connection.sethostname(p.database->server_addr); this->connection.setusername(p.database->username); this->connection.setpassword(p.database->password); this->connection.setdatabasename(p.database->database_name); this->connection.setport(p.database->serverport); if (!connection.open()) { this->error = this->connection.lasterror().text(); } else this->error = ""; } qsqlquery database::query(qstring query_text) { this->m_query = qsqlquery(query_text, this->connection); this->m_query.exec(); homecoming m_query; } database::~database() { if (!this->m_query.isactive()) qsqldatabase::removedatabase(this->connectionname); qdebug() << "database object destroyed\n"; }

the problem occurs in class (that uses database):

databaseadaptor::databaseadaptor() { this->db = database(); // other construction operations } void databaseadaptor::fetch() { qsqlquery q = db.query("select * `activities`"); qdebug() << "rows count: " << q.numrowsaffected(); }

it worked versions in past, reason, output qdebug() is

rows count: -1 // , should 2 current version of database.

in qt documentation, said class' members thread-safe. problem? mean, thread end before queries finish execution?

if so, how can maintain connection open until queries finished execution?

(i know it's much read, sure other might have problem @ point, please take time , read it). give thanks you!

c++ qt

No comments:

Post a Comment