2017-05-05 79 views
0

说明:QSqlRelationalTableModel或QSqlQueryModel

我在第一种形式使用QTableView与数据库上市记录。 我创建了编辑单个记录的第二个表单。该记录具有字段,引用其他表(FK)。我试图用QSqlRelationalTableModelsetFilter(用于选择单个记录)和setRelation(用于处理FK和组合框)。我计划使用submit保存记录。我没有成功,因为setFiltersetRelation是冲突。我想我应该用QSqlQueryModel来选择单个记录。

问题:
我该如何保存记录(QSqlQueryModel是只读的)?
这种方法是否正确,适合我的目标?

回答

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() 
相关问题