“大家好,
我有一个表单,其表视图表示一个QSqlRelationalTableModel和通过QDataWidgetMapper链接到同一个模型的小部件。
以下是表的结构:
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并给出以下错误消息:
“接近”:语法错误无法执行语句“”
我看到它可能与主键有关。我在调试模式下执行了以下命令:
QString tempString = tableModelStations->primaryKey().name();但是字符串是空的,这让我相信问题确实在主键中。
然后,我对QSqlRelationalTableModel进行了子类化,以便能够实现setPrimaryKey()函数并手动执行它,但也没有取得任何进展。
有谁能说明一下:
发布于 2014-07-30 03:53:24
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()))QSqlRecord record; // prepare your record, not touching primary key, it's autoinc yourRelModel->insertRecord(yourRelModel->rowCount(QModelIndex()),record);https://stackoverflow.com/questions/21670378
复制相似问题