【问题标题】:Qt QSqlDatabase and QSqlTableModel compatibility with PostgreSQL view?Qt QSqlDatabase 和 QSqlTableModel 与 PostgreSQL 视图的兼容性?
【发布时间】:2013-09-28 02:36:35
【问题描述】:

我在 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;

我在 VC2005 上使用 Qt 4.4.0 编译的 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);
}

消息框显示“无法找到表reporters_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 视图?

非常感谢!

【问题讨论】:

    标签: c++ qt postgresql qsqltablemodel


    【解决方案1】:

    这很可能是一个错误。您使用的是非常旧的 Qt 版本。更新到 4.8.5 再试一次。

    【讨论】:

    • 感谢您的回复。生产环境卡在这个旧版本上。 :( 我也很想尝试更新版本。
    • @crackpot 这有什么关系?使用新版本进行测试,如果它解决了问题,则查找修复它的提交并向后移植...
    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    相关资源
    最近更新 更多