2012-03-01 49 views
16

đang chương trình của tôi cảnh báo tiếp theo này:cảnh báo cơ sở dữ liệu loại bỏ

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

Đây là mã của tôi kết nối với cơ sở dữ liệu là tốt:

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 được quy định như:

QSqlDatabase m_db; 

và thử nghiệm của tôi là:

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

Làm cách nào để khắc phục sự cố?

Cảm ơn bạn rất nhiều.

Trả lời

27

Sau khi bạn đóng, m_db vẫn giữ tham chiếu đến cơ sở dữ liệu bạn đã định cấu hình trong connect().

Bạn có thể thiết lập lại m_db bằng cách gán mặc định xây dựng QSqlDatabase:

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

Cảm ơn bạn rất nhiều bây giờ tất cả ok – Jjreina

+0

Tất nhiên điều này đã có để xảy ra với tôi Thứ sáu muộn và ngày phát hành ... Tôi đã bị thuyết phục rằng sau khi gọi gần() tất cả các tham chiếu đến kết nối đã biến mất! Không trực quan chút nào ... @alexisdm Tôi nợ bạn như 10 loại bia;) – mBardos

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

thử này nó sẽ làm việc ..

+0

nó có hoạt động cho bạn không? – shofee

+0

vâng, thaks bạn rất nhiều. – Jjreina

0

Thêm một phạm vi thêm hiện các trick cùng:

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; 
Các vấn đề liên quan