QSqlTableModel问题 - 没有自动更新

时间:2009-06-24 15:06:16

标签: sql database qt qt4

在Qt 4.4中设置表格模型之后:

    QSqlTableModel *sqlmodel = new QSqlTableModel();

    sqlmodel->setTable("Names");
    sqlmodel->setEditStrategy(QSqlTableModel::OnFieldChange);
    sqlmodel->select();
    sqlmodel->removeColumn(0);

    tableView->setModel(sqlmodel);
    tableView->show();

内容显示正确,但无法进行编辑,错误:

     QSqlQuery::value: not positioned on a valid record

3 个答案:

答案 0 :(得分:12)

我可以在Qt 4.5.1中确认该错误的存在与您报告的完全相同,并且文档,例如here仍然提供了一个错误的示例(即包含removeColumn调用的示例)。

作为一种解决方法,我试图写一个连接到beforeUpdate信号的插槽,想要检查QSqlRecord有什么问题,它将在DB中更新并可能修复它,但是我无法解决这个问题 - 对该记录参数的方法的任何调用都会导致我的玩具应用程序崩溃。

所以我已经放弃了这个想法并转而采用正确的方法(可见性应该由视图决定,而不是模型,对吧? - ):失去removeColumn而是代替它,而是致电tableView->setColumnHidden(0, true)。这样就可以隐藏ID并且一切正常。

所以我认为我们可以确认文档错误并在Qt跟踪器中打开它的问题,因此可以在下一轮文档中修复,对吧?

答案 1 :(得分:0)

似乎原因就在于

sqlmodel->removeColumn(0);

在评论之后,一切都很完美。 因此,我必须找到另一种不在表格中显示ID的方法; - )

修改 我说“似乎”,因为在“Qt开发基础”的例子中,Johan Thelin也删除了第一列。所以,如果其他人也尝试这个并报告结果,那就太好了。

答案 2 :(得分:0)

我在PyQt中使用Qt 4.6.1,问题仍然存在。删除“removeColumn(0)”解决了这个问题。