首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSqlQueryModel返回空结果

QSqlQueryModel返回空结果
EN

Stack Overflow用户
提问于 2015-08-16 14:38:32
回答 2查看 755关注 0票数 0

代码:

代码语言:javascript
复制
queryModel = new QSqlQueryModel();
QSqlQuery sql;
QString strSql = "{CALL syllabi_output}";
sql.exec(strSql);
queryModel->setQuery(sql);
ui->tableView_4->setModel(queryModel);

存在标题,但没有行。

存储过程在Management Studio中工作正常(两行)。

EN

回答 2

Stack Overflow用户

发布于 2015-08-16 16:24:56

查询是一个局部变量,一旦超出作用域就会被析构。您可能会在方法或构造函数中调用它,因此在视图有机会对查询数据执行任何操作之前,作用域很快就结束了。查询模型的存留时间超过查询,并且没有数据可供提供,因此视图显示为空。

相反,您应该将模型和查询一起持久化。例如:

代码语言:javascript
复制
class Widget : public QWidget {
  Q_OBJECT
  Widget::Ui ui;
  QSqlQueryModel m_model;
  QSqlQuery m_modelQuery;
  ...
public:
  void runQuery() {
    m_modelQuery.exec(QStringLiteral("{CALL syllabi_output}"));
    m_model.setQuery(m_modelQuery);
    ui.tableView_4->setModel(&m_model);
  }
  ...
};

如果查询总是简单的,并且您总是希望立即执行它,那么您可以使用另一个setQuery重载:

代码语言:javascript
复制
class Widget : public QWidget {
  Q_OBJECT
  Widget::Ui ui;
  QSqlQueryModel m_model;
  ...
public:
  void runQuery() {
    m_model.setQuery(QStringLiteral("{CALL syllabi_output}"));
    ui.tableView_4->setModel(&m_model);
  }
  ...
};

请注意,没有将ui或查询模型存储为指针的目的。如果您坚持延迟实例化查询模型,您当然可以这样做:

代码语言:javascript
复制
class Widget : public QWidget {
  Q_OBJECT
  Widget::Ui ui;
  QPointer<QSqlQueryModel> m_model; // this is a non-owning pointer
  ...
public:
  void runQuery() {
    if (m_model.isNull()) m_model = new QSqlQueryModel(this);
    m_model->setQuery(QStringLiteral("{CALL syllabi_output}"));
    ui.tableView_4->setModel(&m_model);
  }
  ...
};
票数 0
EN

Stack Overflow用户

发布于 2017-06-16 23:21:21

我发现这样做是为了解决类似的问题。除了Kubar提到的变量作用域之外,还有一些其他的Qt和SQL Server问题。

  • QSqlQueryModel只能与forward-only queries
  • Forward一起使用,因为查询是由数据库驱动程序确定的。setForwardOnly(false)仅是一个建议
  • 默认情况下,SQL Server存储过程可能会返回多个(中间)结果集。

This answer from Qt Forum对此进行了更详细的介绍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32032530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档