2012-07-19 122 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