如何解决QSqlQuery::exec: database not open

对于初学QT数据库操作的童鞋来说,一定有这么一丢丢的疑问,为何我们从来没有看见QSqlQuery在声明的时候或者实例化的时候与数据库进行关联呢?
实际这是QT系统为我们提供的一个便利,如果我们仅仅只有一个连接,那么系统默认将QSqlQuery关联到了默认的唯一的数据库连接上了。也正因如此,我们遇上了QSqlQuery::exec: database not open的问题。
也正因如此,我们QT中使用combobox与QSqlQueryModel进行数据绑定的时候,下拉框里面没有任何数据。
往往需要通过逐步查找才能够发现问题。出现这样的问题,其根源就是QT的系统默认数据库关联惹的祸。
所以,解决的方法也就是强制指定数据库关联。

解决QSqlQuery::exec: database not open有两个。
1、在query初始化的时候,不适用系统默认的数据库关联,而是强制指定关联数据库,即:
将:QSqlQuery query;
修改为:
QSqlQuery query=QSqlQuery(m_db);
2、在QSqlQueryModel的setquery中强制指定数据库
一般情况我们都默认这样写:
model->setQuery(“select name from class”);
如:
QSqlQueryModel *model=new QSqlQueryModel(this);
model->setQuery(“select name from class”,m_db);

发布了116 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/haigear/article/details/102539984