C++ 更新QSqlTableModel中的记录

C++ 更新QSqlTableModel中的记录,c++,qt,qt4,model-view,qtsql,C++,Qt,Qt4,Model View,Qtsql,我正在尝试更新记录,我有以下信息: tableModel->select(); QModelIndex index=ui.tableView->currentIndex(); QString sqlQuery=QString(“更新%1设置firstname=:firstname,lastname=:lastname,country=:country,city=:city WHERE id=:id)”).arg(表名); query.prepare(sqlQuery); QSqlRecord r

我正在尝试更新记录,我有以下信息:

tableModel->select();
QModelIndex index=ui.tableView->currentIndex();
QString sqlQuery=QString(“更新%1设置firstname=:firstname,lastname=:lastname,country=:country,city=:city WHERE id=:id)”).arg(表名);
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());
exec();
tableModel->submitAll();
应用程序编译时没有错误,但不会保存任何编辑

    query.bindValue(":id", ui.tableView->currentIndex());
这是你那令人讨厌的一行代码。您可以使用数据函数尝试返回实际索引或值,但请记住tableView索引!=您的SQL数据库索引。如果您删除了一行,那么数据库上的索引将与Qt中的索引不同,因此您需要在初始SQL查询中包含实际的DB ID,并将其与其他值一起存储,然后在运行更新查询时返回


这是你那令人讨厌的一行代码。您可以使用数据函数尝试返回实际索引或值,但请记住tableView索引!=您的SQL数据库索引。如果您删除了一行,那么数据库上的索引将与Qt中的索引不同,因此您需要在初始SQL查询中包含实际的DB ID,并将其与其他值一起存储,然后在运行更新查询时返回它。

直接使用而不是
QModelIndex
对象。直接使用而不是
QModelIndex
对象。我现在有query.bindValue(“:id”,tableModel->data(index,Qt::DisplayRole));但仍然无法更新。请尝试query.bindValue(“:id”,tableModel->record(index.row).value(“id”))。这意味着您需要在tableView中包含items ID,但您可以将其包含在内,然后将其标记为隐藏字段。这是一种较长的方法(可能还有更好的方法),但它是可靠的。当使用query.bindValue(“:id”,tableModel->record(index.row).value(“id”);,调用“QSqlTableModel::record(unresolved overloaded function type>)”时,我得到一个错误:没有匹配函数;。我在QTableView中显示了ID列。现在我有了query.bindValue(“:ID”,tableModel->data(index,Qt::DisplayRole));但仍然无法更新。请尝试query.bindValue(“:id”,tableModel->record(index.row).value(“id”))。这意味着您需要在tableView中包含items ID,但您可以将其包含在内,然后将其标记为隐藏字段。这是一种较长的方法(可能还有更好的方法),但它是可靠的。当使用query.bindValue(“:id”,tableModel->record(index.row).value(“id”);,调用“QSqlTableModel::record(unresolved overloaded function type>)”时,我得到一个错误:没有匹配函数;。我在QTableView中显示了ID列。