У меня есть таблица базы данных SQLite со следующей схемой:
TABLE IenState (
Id primary key,
NetId integer,
NodeId integer,
DevType text
Qos integer
)
Используя утилиту Browser DB, я вставил запись в таблицу.
Я написал программу 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 имеет имена полей в соответствии со схемой базы данных, и record.setValue операции работают нормально. Я не могу выяснить причину сбоя.