2014-01-27 56 views
0

我在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

回答

1

QSqlTableModel(或更一般地說QSqlQueryModel)將查詢執行委託給QSqlQuery。當收到查詢結果時,它們將以行和列的形式存儲在內部表格中,您可以使用QModelIndexQAbstractItemModel::data()訪問它們。

QSqlTableModel本身並不是SQL解釋器。一點也不。它不爲您提供任何分析例程。這不是這堂課的目的。如果您需要分析模型中的數據,則必須自己編寫數據。