我试图从ODBC源(informix db)加载和显示数据。 我可以创建并打开连接。但是我遇到了QSqlTableModel的一些问题。 以下代码编译并运行没有错误但不显示任何数据。我的表中的列显示在QTableView中。 (1和3) 当我使用QSqlQueryModel(2)时,我从我的表中获取数据,因此连接起作用,我就在正确的数据库上。
有人知道我做错了什么或我要用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 :(得分: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 );
希望它有所帮助。