QSqlRelationalTableModel 更新问题

QSqlRelationalTableModel 更新问题 在开发一个qt项目时,因为涉及操纵多张表结构,我使用QSqlRelationalTableModel作为我的模型(myModel),将其中一个设定为主表,为相应的列设定引用关系表,设定相应的委托。然后在视图中对其进行增删改查操作,发现对于一个已经存在的记录进行修改时,发现视图中的相应项数据能够更新,但是等到再一次更新整个视图时,被更新的项数据撤销。
打印myModel内容,发现数据确实更新了,进行提交submitAll()后再次更新视图数据就被撤销。这说明submitAll并没能将myModel中的更改提交到数据库中。查看myModel->lastError(),并没有任何错误。这说明更新语句并没有任何错误。重新查看帮助文档,发现使用QSqlRelationalTableModel需注意如下事项:

  • The table must have a primary key declared.
  • The table’s primary key may not contain a relation to another table.
重新查看我的表结构,如下:
table A 表格语法:
字段 说明
punId primary key
caseId primary key
typeId primary key
我的数据库中的表有主键,满足第一条,但是这个主键包含3个字段,每个字段都是外键,引用其他表的数据,不满足第二条。重新修改表结构,添加一个id字段作为主键,其余3个字段作为普通字段。
修改后的table A:
字段 说明
id primary key
punId
caseId
typeId
【QSqlRelationalTableModel 更新问题】调整相应代码,运行程序,成功实现对已经存在记录的修改,问题解决。

    推荐阅读