QSqlRelationalTableModel或QSqlQueryModel

时间:2017-05-05 06:13:16

标签: sql qt

说明

我在第一种形式的数据库中使用QTableView来列出记录。 我创建第二个表单来编辑单个记录。此记录具有字段,引用其他表(FK)。我尝试将QSqlRelationalTableModelsetFilter(用于选择单个记录)和setRelation(用于处理FK和组合框)一起使用。我打算用submit来保存记录。我没有成功使用此方案,因为setFiltersetRelation存在冲突。我想我应该使用QSqlQueryModel来选择单个记录。

问题:
我应该如何保存记录(QSqlQueryModel是只读的)? 这种方法对我的目标是正确的吗?

1 个答案:

答案 0 :(得分:0)

我有类似的问题,但我的解决方案是这样的: 可能你需要改变一些事情,但它有效。

self.model = QSqlRelationalTableModel()
self.model.setTable("FK The table Name")
self.model.setRelation(index, QSqlRelation("Pkey table", "The id field", "The value field you want"))
self.model.select()

如果您想

,请将关系创建设置为映射器
self.mapper = QDataWidgetMapper()
self.mapper.setModel(self.model)
relModel = self.model.relationModel(index) #the same from the SetRelation
self.YourCombBox.setModel(relModel)
self.TourCombBox.setModelColumn(relModel.fieldIndex( "The value field you want"))
self.mapper.addMapping(self.YourCombBox, int)
self.mapper.toFirst()

并且为了省你而去

_insertRecord = QSqlRecord()
_insertRecord.append(QSqlField(int, QVarinat.WhatEverTypeItIs))
quer = QSqlQueryModel()
quer.setQuery("SELECT id FROM TheTable where Name = '%s'" %(YourComboxCurrentText()))
_insertRecord.setValue(int, quer.record(0).value("id"))
self.model.insertRowIntoTable(_insertRecord)      
self.model.select()