我在PostgreSQL视图上使用QSqlTableModel遇到了问题。让我先说明相关代码。
使用PostgreSQL 9.2.4上运行的以下代码创建视图:
CREATE OR REPLACE VIEW reporters_spaces_edit AS
SELECT reporters.name AS reporter_name, spaces.name AS space_name,
reporters_spaces.reporter_id IS NOT NULL AND reporters_spaces.space_id IS NOT NULL AS linked
FROM reporters
CROSS JOIN spaces
LEFT JOIN reporters_spaces ON reporters.id = reporters_spaces.reporter_id AND reporters_spaces.space_id = spaces.id;
使用Qt 4.4.0在VC2005上编译的我的C ++代码如下所示:
void populateModel()
{
QTableView lrView;
QSqlDatabase lrDb(QSqlDatabase::addDatabase("QPSQL"));
...
QSqlTableModel lrModel(lrDb);
lrModel.setTable("reporters_spaces_edit");
if (!lrModel.select())
{
QMessageBox::critical(
0,
tr("Database Error"),
lrModel.lastError().text());
return;
}
lrView.setModel(lrModle);
}
在消息框中显示“无法找到表reporter_spaces_edit”。
我试图找出数据库中的所有视图。我添加了以下行:
QPlainTextEdit lrEdit;
lrEdit->setPlainText(lrDb.table(QSql::Views).join("\n"));
结果列表与
相同QPlainTextEdit lrEdit;
lrEdit->setPlainText(lrDb.table(QSql::Tables).join("\n"));
是否意味着在PostgreSQL上运行时,QSqlTableModel不支持SQL视图?
非常感谢!
答案 0 :(得分:2)
这可能是一个错误。你正在使用一个非常古老的Qt版本。更新到4.8.5并重试。