2012-03-01 9 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

बेशक यह था शुक्रवार देर से और रिलीज की तारीख पर मेरे साथ होने के लिए ... मुझे विश्वास था कि बंद करने के बाद() कनेक्शन के सभी संदर्भ चले गए हैं! बिल्कुल अंतर्ज्ञानी नहीं ... @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; 
संबंधित मुद्दे