加载和显示数据(QSqlTableModel)

时间:2014-09-23 11:58:52

标签: c++ qt

我试图从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();

1 个答案:

答案 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 );

希望它有所帮助。