【问题标题】:Updating a record in QSqlTableModel更新 QSqlTableModel 中的记录
【发布时间】:2011-09-12 06:16:40
【问题描述】:

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

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();

应用程序编译没有错误,但不会保存任何编辑。

【问题讨论】:

标签: c++ qt qt4 model-view qtsql


【解决方案1】:
    query.bindValue(":id", ui.tableView->currentIndex());

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

【讨论】:

  • 我现在有了 query.bindValue(":id", tableModel->data(index, Qt::DisplayRole));但仍然无法更新。
  • 试试 query.bindValue(":id", tableModel->record(index.row).value("id"))。这确实意味着您需要将项目 ID 包含到 tableView 中,但您可以包含它,然后将其标记为隐藏字段。这是一种较长的方法(可能还有更好的方法),但它是可靠的。
  • 在使用 query.bindValue(":id", tableModel->record(index.row ).value("id"));.我在QTableView中显示了ID列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2011-04-30
  • 2018-03-26
  • 1970-01-01
相关资源
最近更新 更多