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 ビューがサポートされていないということですか?
どうもありがとう!