2012-03-01 18 views
16

mój kod pokazują to obok ostrzeżenie:ostrzeżenie

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

To jest mój kod połączenia z bazą danych jest w porządku:

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 jest zdefiniować jako:

QSqlDatabase m_db; 

a mój test to:

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

Jak mogę to naprawić?

Dziękuję bardzo.

Odpowiedz

27

Po zamknięciu, m_db nadal zawiera odniesienie do bazy danych skonfigurowanej w connect().

Można zresetować m_db poprzez przypisanie domyślne zbudowane QSqlDatabase:

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

Dziękuję bardzo teraz wszystko ok – Jjreina

+0

Oczywiście to miało zdarzyło mi się w piątek późno i w dniu premiery ... Byłem przekonany, że po wywołaniu close() wszystkie odniesienia do połączenia zniknęły! Wcale nie intuicyjny ... @alexisdm Jestem ci winien 10 piw;) – mBardos

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

spróbuj to będzie działać ..

+0

czy to działa? – shofee

+0

tak, dziękuję bardzo. – Jjreina

0

Dodanie dodatkowego zakresu robi to samo trick:

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;