1

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);
}

メッセージ ボックスに「テーブル reports_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 ビューがサポートされていないということですか?

どうもありがとう!

4

1 に答える 1

2

それはバグかもしれません。非常に古いバージョンの Qt を使用しています。4.8.5 に更新して、もう一度お試しください。

于 2013-09-23T11:25:07.287 に答える