2012-07-19 121 views
1

我有小部件,其連接到數據庫:的SQLite數據庫刪除錯誤

Widget::Widget(QWidget *parent) 
{ 
    QString databaseName = "name"; 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName(databaseName); 
    db.setHostName("localhost"); 
    if(!db.open()) 
     qDebug()<<"ret error"; 
} 

現在我想刪除數據庫連接後插件關閉(目前我得到這樣的警告:QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection is still in use...)。我已經閱讀了一些主題,並嘗試從他們那裏評估一些解決方案,但沒有一個適合我。我的代碼:

void Widget::closeEvent(QCloseEvent *e) 
{ 
    QSqlDatabase db = QSqlDatabase::database(); 
    QString connection = db.connectionName(); 
    db.close(); 
    QSqlDatabase::removeDatabase(connection); 
    qDebug()<<"error: "<<db.lastError().text(); 
} 

錯誤我得到的是:Driver not loaded Driver not loaded

什麼是做這種正確的方法是什麼?

編輯:

另一種方法:

void Widget::someMethod() 
{ 
    QSqlDatabase db = QSqlDatabase::database(); 
    QSqlQuery query(db); 
    query.exec("some query"); 
} 
+0

你有你的sqlite庫安裝在你的系統中? – ScarCode 2012-07-19 09:39:33

+0

是的,我可以添加數據的一切工作。調用查詢並在表格視圖中查看它。唯一的問題是關閉。錯誤在closeEvent()中返回。 – krzych 2012-07-19 10:20:05

回答

1

先給在addDatabase的連接名稱參數(第2參數)(),這應該解決您的問題。

下面是修改後的代碼,你可以嘗試:

Widget::Widget(QWidget *parent) 
{ 
    QString databaseName = "name"; 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "test_db_connection"); 
    db.setDatabaseName(databaseName); 
    db.setHostName("localhost"); 
    if(!db.open()) 
     qDebug()<<"ret error"; 
} 

這裏是我的機器SQLite數據庫一個完整的工作代碼,你可以作爲參考使用:

local_db = QSqlDatabase::addDatabase("QSQLITE","localdb"); 
local_db.setDatabaseName("localdb.sqlite"); 
local_db_query = QSqlQuery(local_db); 
local_db_query.prepare("SELECT * FROM sample_table"); 
local_db_query.exec(); 
+0

添加並獲得:「'QSqlQuery :: exec:database not open'」。數據庫甚至沒有打開。 – krzych 2013-02-06 07:21:23

+1

請使用sqllite文件名作爲數據庫名稱並檢查。我的意思是使用「name.sqlite」或什麼是您的計算機上的sqlite文件名稱 – Mugunth 2013-02-07 03:58:54

+0

這有助於。我已經接受了答案。如果你能解釋它,再多一點也不錯。 – krzych 2013-02-07 07:32:11