SubmitAll()在QSqlRelationalTableModel上失败

时间:2014-02-10 06:24:46

标签: qt qtsql qsqltablemodel

'大家好,

我有一个带有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()函数并手动执行,但也没有运气。

有人能说清楚:

  1. 为什么submitAll()无法正常工作

  2. 如何访问submitAll()

  3. 使用的语句

    提前致谢,

    此致

    爱德华

1 个答案:

答案 0 :(得分:0)

  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不需要这个;
  2. 你应该尝试:

    1. 不在您的视图中显示主键,不允许更改它(这将在dublicate主键上发出db错误);
    2. 更改视图后,使用SIGNAL dataChange(QModelIndex,QModelIndex)在您使用submitAll;
    3. 的地方添加您的广告位
    4. 在TableModel上插入行时使用: yourModel->insertRow(yourModel->rowCount(QModelIndex()))
    5. 在RelationalTableModel上插入行时使用:

      QSqlRecord record; // prepare your record, not touching primary key, it's autoinc yourRelModel->insertRecord(yourRelModel->rowCount(QModelIndex()),record);