【发布时间】: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()<<"Query succeeded!"<<endl; QSqlRecord rec = qry.record(); while (qry.next()){ qDebug() << qry.value(0).toString()+" "+qry.value(1).toString()+" "+qry.value(2).toString(); } }这成功地打印出表中的记录。这能回答你的问题吗? -
尝试在
_tableModel->select()之后添加qDebug() << _database.lastError().text();以查看错误消息 -
结果是一样的。这是一个空字符串。我可能会尝试一些不同于 PostgreSQL 的东西,看看是否与它有关。
标签: qt qsqltablemodel