c++ - 更新 QSqlTableModel 中的记录

标签 c++ qt qt4 model-view qtsql

我正在尝试更新一条记录,我有这个:

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/

相关文章:

C++ Eigen 非连续子集

c++ - 您能否将相同的 protobuf 消息静态链接到多个 DLL - 然后让这些 DLL 协同工作?

C++ 从注册表中获取 Windows 产品 ID

c++ - 在 QDateTime 中格式化小时数的 Qt4 问题

c++ - OpenVDB 错误 : Q_FOREACH passed 3 arguments, 但只需要 2

c++ - Ubuntu + qt,如何更新?

c++ - 表格 View 搜索

c++ - 如何交替从文件中获取一行数据和一个整数?

c++ - QwtPlot - 设置样本期间的内存访问冲突

qt - 在鼠标点上放大/缩小?