2017-05-05 6 views
0

説明:QSqlRelationalTableModelまたはQSqlQueryModel

私はレコードを一覧表示するための第1の形式でデータベースとQTableViewを使用しています。 1つのレコードを編集するための2番目のフォームを作成します。このレコードには、他のテーブル(FK)を参照するフィールドがあります。私はsetFilter(単一のレコードを選択する)とsetRelation(FKとコンボボックスの処理用)とQSqlRelationalTableModelを使用しようとしました。私はレコードを保存するためにsubmitを使用する予定でした。 setFiltersetRelationが矛盾しているので、このスキームでは成功しませんでした。私はQSqlQueryModelを使って一つのレコードを選択すべきだと思います。

質問:
レコードを保存するにはどうすればよいですか(QSqlQueryModelは読み取り専用です)。
この方法は正しいですか、ターゲットに最適ですか?

答えて

0

私は同様の問題がありましたが、私の解決策は次のようなものでした: おそらくあなたはsomethingsを変更する必要がありますが、それは動作します。あなただけ行く

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() 

とあなたを救うためにしたい場合は、マッパーcreatの関係を設定した後

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() 

_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() 
関連する問題