首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SubmitAll()在QSqlRelationalTableModel上失败

SubmitAll()在QSqlRelationalTableModel上失败
EN

Stack Overflow用户
提问于 2014-02-10 06:24:45
回答 1查看 1.1K关注 0票数 0

“大家好,

我有一个表单,其表视图表示一个QSqlRelationalTableModel和通过QDataWidgetMapper链接到同一个模型的小部件。

以下是表的结构:

代码语言:javascript
复制
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并给出以下错误消息:

“接近”:语法错误无法执行语句“

我看到它可能与主键有关。我在调试模式下执行了以下命令:

代码语言:javascript
复制
QString tempString = tableModelStations->primaryKey().name();

但是字符串是空的,这让我相信问题确实在主键中。

然后,我对QSqlRelationalTableModel进行了子类化,以便能够实现setPrimaryKey()函数并手动执行它,但也没有取得任何进展。

有谁能说明一下:

  1. 为什么submitAll()不能工作
  2. 如何访问submitAll()使用的语句
EN

回答 1

Stack Overflow用户

发布于 2014-07-30 03:53:24

  1. 为什么submitAll()不能工作--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不需要这个;

你应该试着:

  1. 在视图中不显示主键,也不允许更改主键(这将在双副本主键上发出db错误);
  2. 更改视图后,使用信号dataChange(QModelIndex,QModelIndex)在使用submitAll的位置插入插槽;
  3. 关于在TableModel上插入行的用法:yourModel->insertRow(yourModel->rowCount(QModelIndex()))
  4. 在RelationalTableModel上插入行时,请使用: QSqlRecord record; // prepare your record, not touching primary key, it's autoinc yourRelModel->insertRecord(yourRelModel->rowCount(QModelIndex()),record);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21670378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档