2012-03-01 18 views
16

私のコード・ショーこの次の警告:警告削除データベース

QSqlDatabasePrivate::removeDatabase: connection ‘qt_sql_default_connection’ 
is still in use, all queries will cease to work 

これは、データベースとの接続は大丈夫です私のコードです:

QSqlDatabase m_db; 

QSqlDatabase database::db() 
{ 
    return m_db; 
} 

bool database::connect() 
{ 
    m_db = QSqlDatabase::addDatabase("QMYSQL"); 
    m_db.setDatabaseName("aaaa"); 
    m_db.setHostName("192.168.xxx.xxx"); 
    m_db.setUserName("xx"); 
    m_db.setPassword("xxxx"); 
    m_db.setPort(1234); 

    return m_db.open(); 
} 

void database::close() 
{ 
    QString connection; 
    connection = m_db.connectionName(); 
    m_db.close(); 
    m_db.removeDatabase(connection); 
} 

m_dbはとして定義され

と私のテストは:

database db; 
qDebug() << "CONNECT: " << db.connect(); 
db.close(); 

どうすれば修正できますか?

ありがとうございました。

答えて

27

m_dbには、connect()で設定したデータベースへの参照が残っています。

あなたはデフォルトを割り当てることによってm_dbをリセットすることができますがQSqlDatabaseを構築:

void database::close() 
{ 
    QString connection; 
    connection = m_db.connectionName(); 
    m_db.close(); 
    m_db = QSqlDatabase(); 
    m_db.removeDatabase(connection); 
} 
+0

大変ありがとうございました – Jjreina

+0

もちろんこれは私は金曜日遅く、リリース日に私に起こる...私はclose()を呼び出した後、接続への参照はすべてなくなったと確信していた!直感的ではありません... @alexisdm私はあなたに10ビールが好きです;) – mBardos

5
void database::close() 
{ 
    QString connection; 
    connection = m_db.connectionName(); 
    m_db = QSQlDatabase(); 
    //m_db.close(); 
    m_db.removeDatabase(connection); 
} 

それが動作しますこれを試してください。..

+0

それはあなたのために働いたのですか? – shofee

+0

はい、あなたを非常に賞賛します。 – Jjreina

0

追加の範囲を追加すると同じトリックを行います

QString connectionName; 
bool ok = false; 

{ 
    QSqlDatabase db = QSqlDatabase::addDatabase(databaseType); 
    connectionName = db.connectionName(); 
    db.setHostName(hostname); 
    db.setDatabaseName(databaseName); 
    db.setUserName(userName); 
    db.setPassword(password); 
    ok = db.open(); 
    db.close(); 
} 

QSqlDatabase::removeDatabase(connectionName); 
return ok; 
関連する問題