如何查询本地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();
}
如何在本地模型副本上运行查询?
答
QSqlTableModel
(或更一般地说QSqlQueryModel
)将查询执行委托给QSqlQuery
。当收到查询结果时,它们将以行和列的形式存储在内部表格中,您可以使用QModelIndex
和QAbstractItemModel::data()
访问它们。
QSqlTableModel
本身并不是SQL解释器。一点也不。它不为您提供任何分析例程。这不是这堂课的目的。如果您需要分析模型中的数据,则必须自己编写数据。
你是什么意思的“本地复制”?什么的副本? – Googie
@Googie我的意思是生活在我的模型中的远程SQL数据的副本,而不是在我的服务器上的SQL数据库中联机。当我提交我的模型时,这两个将同步。 – Mikhail
QSqlTableModel实现QAbstractItemModel,因此它提供了访问数据的标准API,主要是使用QAbstractItemModel :: data()。 QSqlTableModel将SQL查询委托给QSqlQuery。您不能直接在QSqlQueryModel上执行SQL查询,因为它不是SQL解释器。 – Googie