【问题标题】:How to query a local QSqlQueryModel?如何查询本地 QSqlQueryModel?
【发布时间】:2014-02-17 19:11:00
【问题描述】:

我正在QSqlTableModel::OnManualSubmit 模式下显示 QSqlTableModel。

我想在我的本地副本上运行 SQL 样式查询,例如,我有一个 getMax 函数,当我添加新行时它会发生变化。如果我的用户在交互过程中本地更改QSqlTableModel,我希望getMax 产生不同的输入,但getMax 函数远程查询数据,结果将始终相同,与用户所做的任何更改无关.

int TestMe::getMax(QString col,QString table)
{
    QSqlQuery query;
    sf(query.exec("SELECT MAX("+col+") FROM "+table));
    sf(query.first());
    auto rec = query.record();
    return rec.field(0).value().toInt();
}

如何在模型的本地副本上运行查询?

【问题讨论】:

  • “本地副本”是什么意思?什么副本?
  • @Googie 我的意思是我的模型中的远程 SQL 数据的副本,而不是我服务器上的 SQL 数据库中的在线数据。当我提交我的模型时,这两个将同步。
  • QSqlTableModel 实现了 QAbstractItemModel,因此它提供了用于访问其中数据的标准 API,主要是 QAbstractItemModel::data()。 QSqlTableModel 将 SQL 查询委托给 QSqlQuery。您不能直接在 QSqlQueryModel 上执行 SQL 查询,因为它不是 SQL 解释器。

标签: c++ sql qt qsqlquery qsqltablemodel


【解决方案1】:

QSqlTableModel(或更一般的QSqlQueryModel)将查询执行委托给QSqlQuery。收到查询结果后,它们以包含行和列的表的形式在内部存储,您可以使用QModelIndexQAbstractItemModel::data() 访问它们。

QSqlTableModel 本身不是 SQL 解释器。一点也不。它不为您提供任何分析例程。这不是这堂课的目的。如果需要对模型中的数据进行分析,就得自己写。

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2019-01-08
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2015-03-06
    相关资源
    最近更新 更多