在QSqlTableModel中插入行后提交时出现错误-没有要更新的字段

时间:2019-06-07 13:46:47

标签: qt qtsql qsqltablemodel qsqldatabase

我有一个具有以下架构的SQLite数据库表:

TABLE IenState (
   Id      primary key,
   NetId   integer,
   NodeId  integer,
   DevType text
   Qos     integer      
)

使用数据库浏览器实用程序,我在表中插入了一条记录。
我编写了一个Qt程序来与数据库进行交互。从程序中,我可以读取表中存在的记录。但是,当我尝试插入新记录时,出现以下错误:

  

没有要更新的字段。

当我提交对表的更改时发生错误。以下代码段显示了我如何执行插入操作。

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("file.db");
if (!db.isOpen()) {        
   qFatal("Failed to open database");          
}

QSqlTableModel model(nullptr, db);
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.setTable("IenState");
model.select();

int idRow = model.rowCount();
if (!model.insertRows(idRow, 1)) {
    qFatal("Row insertion FAILED");
}
QSqlRecord record = model.record(idRow);

record.setValue("Id", 3);
record.setValue("NetId", 0);
record.setValue("NodeId", 1);
record.setValue("DevType", "sm");
record.setValue("Qos", 95);

if (!model.setRecord(idRow, record)) {
    qFatal("Setting record FAILED");
}

if (!model.submitAll()) {
    qFatal("Submitting Failed. Error: %s, %d",
        qPrintable(model.lastError().text()),
        model.lastError().type());
}

代码在 model.submitAll()操作中失败,并且提交失败。错误:没有要更新的字段2 。我确认, QSqlRecord记录具有根据数据库架构的字段名称,并且 record.setValue 操作可以正常工作。我无法找出失败的原因。

1 个答案:

答案 0 :(得分:1)

快速浏览,我不是专家: 您使用idRow设置为行数。由于它是从零开始的索引,因此不能使用idRow,但必须使用idRow-1。 另外,如果要在末尾添加新记录,请使用-1作为索引来插入record(...)。 您可以通过model.record()来查询干净的记录,而无需索引。您可以使用此记录来填充和插入。 我希望这将有所帮助。再说一次,我不是专家。