'大家好,
我有一个带有tableview的表单,表示通过QDataWidgetMapper链接到同一模型的QSqlRelationalTableModel和小部件。
这是表结构:
queryString = QString("CREATE TABLE t100000_Stations ("
"RecordID INTEGER PRIMARY KEY AUTOINCREMENT,"
"StationID TEXT UNIQUE, "
"ProjectID TEXT, "
"LocalName TEXT, "
"StationType TEXT REFERENCES t911000_StationTypes(StationType), " // We have to link station type to a table (maybe parameters)
"Easting DOUBLE NOT NULL, "
"Northing DOUBLE NOT NULL, "
"Latitude DOUBLE, "
"Longitude DOUBLE, "
"LatLonDatum TEXT, "
"CoordinateSystem TEXT, "
"Elevation DOUBLE, "
"ElevationType INTEGER REFERENCES t908000_ParameterTypes(ParameterID), " // Same here
"ElevationDatum TEXT, "
"SurveyMethod TEXT, "
"Surveyor TEXT, "
"SurveyDate DATETIME, "
"LandTenure TEXT, "
"Region TEXT, "
"MiningLease TEXT, "
"Comments TEXT,"
"Source TEXT NOT NULL, "
"SourceDate DATETIME NOT NULL, "
"EntryAuthor TEXT NOT NULL, "
"EntryDate DATETIME NOT NULL)"
);
表单完美地显示记录和关系,包括关系字段的组合框和表视图委托。 我的问题是表值中的任何编辑都不会传回数据库。
经过多次尝试,我最终将setEditStrategy更改为OnManualSubmit。 我在析构函数的形式中添加了一个submitAll()调用来更新数据库,但它返回false并给出以下错误消息:
“near”。“:语法错误无法执行语句”
我在某个页面看到它可能与主键有关。我在调试模式下执行了以下命令:
QString tempString = tableModelStations->primaryKey().name();
但字符串变空了,这让我相信问题确实存在于主键中。
然后我将QSqlRelationalTableModel子类化,以便我可以实现setPrimaryKey()函数并手动执行,但也没有运气。
有人能说清楚:
为什么submitAll()无法正常工作
如何访问submitAll()
提前致谢,
此致
爱德华
答案 0 :(得分:0)
t work only in your way, it seems not so good making submit in destructor;
2.How to access the statement used by submitAll()
you don
不需要这个; 你应该尝试:
dataChange(QModelIndex,QModelIndex)
在您使用submitAll
; yourModel->insertRow(yourModel->rowCount(QModelIndex()))
在RelationalTableModel上插入行时使用:
QSqlRecord record;
// prepare your record, not touching primary key, it's autoinc
yourRelModel->insertRecord(yourRelModel->rowCount(QModelIndex()),record);