如何查询本地QSqlQueryModel?

问题描述:

我在QSqlTableModel::OnManualSubmit模式下显示QSqlTableModel。如何查询本地QSqlQueryModel?

我想在我的本地副本上运行SQL样式查询,例如我有一个getMax函数随着添加新行而发生变化。如果我的用户在交互过程中在本地更改QSqlTableModel,我希望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(); 
} 

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

+1

你是什么意思的“本地复制”?什么的副本? – Googie

+0

@Googie我的意思是生活在我的模型中的远程SQL数据的副本,而不是在我的服务器上的SQL数据库中联机。当我提交我的模型时,这两个将同步。 – Mikhail

+0

QSqlTableModel实现QAbstractItemModel,因此它提供了访问数据的标准API,主要是使用QAbstractItemModel :: data()。 QSqlTableModel将SQL查询委托给QSqlQuery。您不能直接在QSqlQueryModel上执行SQL查询,因为它不是SQL解释器。 – Googie

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

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