我正在尝试更新一条记录,我有这个:
tableModel->select();
QModelIndex index = ui.tableView->currentIndex();
QString sqlQuery = QString("UPDATE %1 SET firstname=:firstname, lastname=:lastname, country=:country, city=:city WHERE id=:id)").arg(tableName);
query.prepare(sqlQuery);
QSqlRecord recordz = tableModel->record(index.row());
query.bindValue(":firstname", ui.fEdit->text());
query.bindValue(":lastname", ui.lnEdit->text());
query.bindValue(":country", ui.cEdit->text());
query.bindValue(":city", ui.cityEdit->text());
query.bindValue(":id", recordz.value("id").toInt());
query.exec();
tableModel->submitAll();
应用程序编译没有错误,但不会保存任何编辑。
最佳答案
query.bindValue(":id", ui.tableView->currentIndex());
这是您的违规代码行。您可以使用数据函数尝试返回实际索引或值,但请记住您的 tableView 索引!=您的 SQL 数据库索引。你曾经删除一行你在数据库中的索引将与你在 Qt 中的索引不同,所以你需要将实际的数据库 ID 包含到你的初始 SQL 查询中并将它与其他值一起存储,然后在你运行时返回它您的更新查询。
关于c++ - 更新 QSqlTableModel 中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383963/