Qt QSqlDatabase和QSqlTableModel兼容PostgreSQL视图?

时间:2013-09-23 08:51:10

标签: c++ qt postgresql qsqltablemodel

我在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视图?

非常感谢!

1 个答案:

答案 0 :(得分:2)

这可能是一个错误。你正在使用一个非常古老的Qt版本。更新到4.8.5并重试。