2014-09-23 59 views
0

我想加載和顯示來自ODBC源(informix db)的數據。 我可以創建並打開連接。但是我有一些QSqlTableModel的問題。 以下代碼編譯並運行時沒有錯誤,但不顯示任何數據。我的表中的列顯示在QTableView中。 (1和3) 當我使用QSqlQueryModel(2)我從我的表中獲取數據,所以連接工作,我在正確的數據庫。加載和顯示數據(QSqlTableModel)

有沒有人知道我在做什麼錯誤或我必須做什麼來顯示我的數據與QTableView? 這是我第一次使用Qt。我在MinGW編譯器的windows下使用Qt,但使用MSVC的結果是一樣的。

this->_connection = QSqlDatabase::addDatabase("QODBC"); 
_connection.setDatabaseName("CargoSoft cs-entw"); 
_connection.open(); 

// 1.) 
QSqlTableModel *model = new QSqlTableModel(this, _connection); 
model->setTable("eakopf_t"); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->select(); 
model->setHeaderData(0, Qt::Horizontal, tr("mandant")); 
model->setHeaderData(1, Qt::Horizontal, tr("positionsnummer")); 

// 2.) 
QSqlQueryModel queryModel; 
queryModel.setQuery("SELECT * FROM eakopf_t"); 
QString mandant = queryModel.record(4).value("mandant").toString(); 

// 3.) 
QTableView *view = new QTableView; 
view->setModel(model); 
//view->hideColumn(0); // don't show the ID 
view->show(); 
+0

據我所知,'_connection.open()'返回true? – Chernobyl 2014-09-23 12:24:28

+0

是的,它返回true。 – user743414 2014-09-23 12:50:42

+0

你的代碼(從文檔複製)是正常的,它的工作原理,所以檢查返回'model-> select();'。如果它返回false,那麼調用'lastError()'知道會發生什麼,但是如果它返回true,那麼我不知道這裏出了什麼問題 – Chernobyl 2014-09-23 13:08:43

回答

2

此代碼正常工作。要知道究竟發生了什麼,我建議您檢查model->select();。如果返回false那麼您應該調用lastError()方法並獲取可讀的錯誤字符串。

有關您當前問題的幾句話。不幸的是,我沒有看到這個錯誤,但我可以給你從俄羅斯論壇的解決方案,也許它可以幫助你在你的研究。

鏈接:http://www.forum.crossplatform.ru/lofiversion/index.php/t3501.html

解決方案:嘗試設置只向前查詢與此:

model->query().setForwardOnly(true); 

或本

QSqlQuery q; 
q.prepare(...); 
q.setForwardOnly(true); 
model->setQuery(q); 

希望它能幫助。