在 QSqlTableModel 中插入一行后提交时出错 - 没有要更新的字段
Error on Submit after Inserting a Row in QSqlTableModel - No Fields to update
我有一个具有以下架构的 SQLite 数据库 table:
TABLE IenState (
Id primary key,
NetId integer,
NodeId integer,
DevType text
Qos integer
)
使用数据库浏览器实用程序,我在 table 中插入了一条记录。
我写了一个Qt程序来与数据库进行交互。从程序中我可以读取 table 中存在的记录。但是,当我尝试插入新记录时,出现以下错误:
No Fields to update.
当我提交对 table 的更改时发生错误。以下代码片段显示了我如何执行插入操作。
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 操作正常。我无法找出失败的原因。
快速浏览一下,我不是专家:
您使用设置为行数的 idRow。因为它是一个从零开始的索引,所以您不能使用 idRow,但您必须使用 idRow-1。
此外,如果要在末尾添加新记录,请使用 -1 作为 insertRecord(...) 的索引。
你可以通过 model.record() 查询一个干净的记录,没有索引。您可以使用此记录来填充和插入。
我希望这将有所帮助。再说一次,我不是专家。
我有一个具有以下架构的 SQLite 数据库 table:
TABLE IenState (
Id primary key,
NetId integer,
NodeId integer,
DevType text
Qos integer
)
使用数据库浏览器实用程序,我在 table 中插入了一条记录。
我写了一个Qt程序来与数据库进行交互。从程序中我可以读取 table 中存在的记录。但是,当我尝试插入新记录时,出现以下错误:
No Fields to update.
当我提交对 table 的更改时发生错误。以下代码片段显示了我如何执行插入操作。
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 操作正常。我无法找出失败的原因。
快速浏览一下,我不是专家: 您使用设置为行数的 idRow。因为它是一个从零开始的索引,所以您不能使用 idRow,但您必须使用 idRow-1。 此外,如果要在末尾添加新记录,请使用 -1 作为 insertRecord(...) 的索引。 你可以通过 model.record() 查询一个干净的记录,没有索引。您可以使用此记录来填充和插入。 我希望这将有所帮助。再说一次,我不是专家。