2012-03-01 16 views
16

benim kod gösterisi bu sonraki uyarı: Bu benim kod veri tabanı ile bağlantıuyarı kaldır veritabanı

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

olduğunu gayet:

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 olarak tanımlamaktır

ve benim testim:

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

Nasıl düzeltebilirim?

Çok teşekkürler.

cevap

27

Kapatma işlemini tamamladıktan sonra, connect()'da yapılandırdığınız veritabanının bir referansı hala m_db olur. işe yarayacak bu deneyin ..

+0

Şimdilik teşekkürler. Tamam, – Jjreina

+0

Tabi ki bu Cuma günü geç saatlerde ve çıkış tarihinde gerçekleşecek ... Kapat() çağrıldıktan sonra bağlantıya yapılan tüm referansların gittiğine ikna oldum! Hiç sezgisel değil ... @alexisdm Sana 10 bira gibi borçluyum;) – mBardos

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

:

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; 

Bir varsayılan atayarak m_db sıfırlayabilirsiniz QSqlDatabase inşa

+0

u işe yaramadı mı? – shofee

+0

evet, sizi çok önemsiyor. – Jjreina

0

ek kapsamını ekleme yapar aynı numarayı

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