现在是从数据库里查出数据,并显示到控件tableView上,我使用的是QSqlTableModel类,缩减后的代码如下:
- C/C++ code
void MainWindow::SelectData(){ QString conn; { QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("test.db"); conn=QSqlDatabase::database().connectionName(); db.open(); QSqlTableModel *model=new QSqlTableModel(this,db); model->setTable("TestTool"); model->select(); ui->tableView->setModel(model); ui->tableView->show(); db.close(); qDebug()<<"Congratulations~Selected Successfully~"; } QSqlDatabase::removeDatabase(conn); }
问题来了,每次执行此方法,系统都会报:
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
而如果不用QSqlTableModel类,却不会有这样的错误:
- C/C++ code
void MainWindow::SelectData(){ QString conn; { QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("test.db"); conn=QSqlDatabase::database().connectionName(); db.open(); QSqlQuery q; q.exec("select * from TestTool,TestProgram where TestTool.ToolId=TestProgram.TestId"); while(q.next()) { ui->textEdit->append(q.value(1).toString());//append自带换行无需加'\n' } q.clear(); db.close(); } QSqlDatabase::removeDatabase(conn); // correct}
原因可能出在没有解除QSqlTableModel和Sqlite数据库的连接上,小弟刚刚玩Qt,想请问下如何解除QSqlTableModel和Sqlite数据库的连接
------解决方案--------------------
支持一下