Совместимость Qt QSqlDatabase и QSqlTableModel с представлением PostgreSQL?

Я столкнулся с проблемой использования QSqlTableModel в представлении PostgreSQL. Позвольте мне сначала показать код релевантности.

представление создается с помощью следующего кода, работающего на 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;

Мой код C++, скомпилированный на VC2005 с Qt 4.4.0, выглядит так:

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

Означает ли это, что представление SQL не поддерживается в QSqlTableModel при работе в PostgreSQL?

Большое спасибо!

1 ответ

Это может быть ошибкой. Вы используете ужасно старую версию Qt. Обновите до 4.8.5 и попробуйте снова.

Другие вопросы по тегам