找回密码
 立即注册
收起左侧

用QSqlTableModel读取数据库中数据后怎样移除数据库连接?

6
回复
9365
查看
[复制链接]
累计签到:8 天
连续签到:1 天
来源: 2015-4-7 21:05:07 显示全部楼层 |阅读模式
4Qter豆
先上代码,后面有代码的讲解



程序的意思是:
1.在主程序中创建数据库,并创建student表,然后向student表中写入数据
2.用QSqlTableModel去读取student表中的数据
3.把QSqlTableModel的数据加载到QTableView上显示
4.把QTableView作为子部件放在主窗口中

最后我要移除打开的这个数据库,可为什么移除数据库连接时会报错(第59行):
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

我搞了一天,头都大了,真不知道怎么办?求大侠,在此感激不尽!!


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

最佳答案

查看完整内容

嗯。是啊,就像joey_Chan说的那样,model占用数据库连接,只有先delete model;然后再执行移除函数。其实简单的程序可以在程序启动时创建数据库连接,退出时再关闭或移除。中间不用管。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-4-7 21:05:08 显示全部楼层
1363386323 发表于 2015-4-7 22:05
@yafeilinux 弄了好几天,不知道哪出错了,帮帮我

嗯。是啊,就像joey_Chan说的那样,model占用数据库连接,只有先delete model;然后再执行移除函数。其实简单的程序可以在程序启动时创建数据库连接,退出时再关闭或移除。中间不用管。
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2015-4-7 22:05:53 显示全部楼层
@yafeilinux 弄了好几天,不知道哪出错了,帮帮我
回复

使用道具 举报

尚未签到

2015-4-8 20:37:39 显示全部楼层
试试先delete 那个model再移除数据库?  

其实一般情况下这种情况可以忽略的,除非你的sql里面显示声明需要commit操作来保存数据。
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2015-4-9 13:08:27 显示全部楼层
yafeilinux 发表于 2015-4-8 21:23
嗯。是啊,就像joey_Chan说的那样,model占用数据库连接,只有先delete model;然后再执行移除函数。其实 ...

关键是我有2个数据库,01.db  02.db  我要把两个数据库都在tabeView上显示,我又不想出现警告,我不知道该怎么做?
回复

使用道具 举报

累计签到:8 天
连续签到:1 天
2015-4-9 13:11:42 显示全部楼层
yafeilinux 发表于 2015-4-8 21:23
嗯。是啊,就像joey_Chan说的那样,model占用数据库连接,只有先delete model;然后再执行移除函数。其实 ...

下面是这个程序的源代码 http://pan.baidu.com/s/1hqrKREc
怎样把这个程序弄得没有警告就行
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2015-4-10 09:17:21 显示全部楼层
  1.      QSqlDatabase  db1=QSqlDatabase::addDatabase("QSQLITE", "con1");
  2.         db1.setDatabaseName("01.db");
  3.         if(!db1.open()){
  4.             qDebug()<<"db no open";
  5.         }

  6.         QSqlQuery query(db1);
  7.         query.exec("create table student(id int primary key)");
  8.         query.exec("insert into student values(1)");
  9.         query.exec("insert into student values(2)");
  10.         query.exec("insert into student values(3)");



  11.         QSqlDatabase  db2=QSqlDatabase::addDatabase("QSQLITE", "con2");
  12.         db2.setDatabaseName("02.db");
  13.         if(!db2.open()){
  14.             qDebug()<<"db no open";
  15.         }

  16.         QSqlQuery query1(db2);
  17.         query1.exec("create table student(id int primary key)");
  18.         query1.exec("insert into student values(4)");
  19.         query1.exec("insert into student values(5)");
  20.         query1.exec("insert into student values(6)");





  21.         QSqlTableModel *tableModel1=new QSqlTableModel(this, db1);
  22.         tableModel1->setTable("student");
  23.         tableModel1->setSort(0,Qt::AscendingOrder);
  24.         tableModel1->setEditStrategy(QSqlTableModel::OnFieldChange);
  25.         tableModel1->select();

  26.         tableView01->setModel(tableModel1);


  27.         QSqlTableModel *tableModel2=new QSqlTableModel(this, db2);
  28.         tableModel2->setTable("student");
  29.         tableModel2->setSort(0,Qt::AscendingOrder);
  30.         tableModel2->setEditStrategy(QSqlTableModel::OnFieldChange);
  31.         tableModel2->select();

  32.         tableView02->setModel(tableModel2);
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了