【问题标题】:I am using QSqlTableModel in Qt, but select function is returning a false我在 Qt 中使用 QSqlTableModel,但选择函数返回 false
【发布时间】:2021-06-01 06:41:20
【问题描述】:

我在使用 QSqlTableModel 的选择函数时遇到问题。它总是返回 false,我一直无法弄清楚原因。

我已经使用 PostgreSQL 设置了一个 SQL 数据库。我能够使用 QSqlDatabase::addDatabase 添加数据库,并且我已经能够使用 QSqlQuery 从数据库中提取数据并创建新表和表中的新行。我现在正在尝试在 TableView 中显示数据库。我发现您可以创建 QSqlTableModel 以插入 TableView。但是,它在“选择”步骤上失败了。

这是我正在运行的代码:

_database = loadDatabase();
qDebug()<<"table database name: "<<_database.databaseName()<<endl;  //Returns: table database name:  "postgres"
qDebug()<<"table database isOpen: "<<_database.isOpen()<<endl;      //Returns: table database isOpen:  true
qDebug()<<"table database tables: "<<_database.tables()<<endl;      //Returns: table database tables:  ("Test", "testtable")
qDebug()<<"last error: "<<_database.lastError().text()<<endl;       //Returns: last error:  " "

_tableModel = new QSqlTableModel(this,_database);
_tableModel->setTable(_database.tables().at(1));
_tableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
if(_tableModel->select()){
    qDebug()<<"Table was selected!"<<endl;
}
else{
    qDebug()<<"Table could not be selected"<<endl;
}

qDebug()<<"is database valid: "<<_database.isValid()<<endl;     //Returns: is database valid:  true

“_database”被定义为一个QSqlDatabase。它总是返回“无法选择表”。

我在 Stack Overflow 上找到了一个答案,建议检查数据库是否 isOpen(),表名是否正确,以及 lastError() 是否有任何错误消息。我将这些答案包含在我的代码中的调试语句中。一切似乎都是正确的,但它返回一个错误。

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • postgres 用户是否有权限选择数据?你可以在 psql shell 中运行选择查询吗?
  • 我相信是的。我是这个 SQL 东西的新手。我可以使用以下代码:code QSqlQuery qry(_database); QString string = "SELECT * FROM " + _database.tables().at(1)+";"; if(qry.exec(string)){ qDebug()&lt;&lt;"Query succeeded!"&lt;&lt;endl; QSqlRecord rec = qry.record(); while (qry.next()){ qDebug() &lt;&lt; qry.value(0).toString()+" "+qry.value(1).toString()+" "+qry.value(2).toString(); } } 这成功地打印出表中的记录。这能回答你的问题吗?
  • 尝试在_tableModel-&gt;select() 之后添加qDebug() &lt;&lt; _database.lastError().text(); 以查看错误消息
  • 结果是一样的。这是一个空字符串。我可能会尝试一些不同于 PostgreSQL 的东西,看看是否与它有关。

标签: qt qsqltablemodel


【解决方案1】:

我想通了。这是 PostgreSQL 的问题。具体来说,10 或 11 之后的版本似乎不适用于 QSqlTableModel。我使用的是第 13 版。代码中存在某种更改,导致 Qt 破坏了这一点。尽管如此,它仍被报告为 Qt 错误。

这是 Qt 错误报告: https://bugreports.qt.io/browse/QTBUG-79033

看起来你可以使用补丁。我最终将我的恢复到早期版本来修复它。

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多