【问题标题】:Qt: How to modify data records in 2 tables using sqlite databaseQt:如何使用 sqlite 数据库修改 2 个表中的数据记录
【发布时间】:2018-03-16 06:01:47
【问题描述】:

问题:您好,我在 QT 中使用 sqlite3 数据库。我的架构定义如下:

table users:        table wishlist
------------        --------------
id                  id
balance, int        balance, int
savings, int        price
                    uid (users id)

任务是让用户可以在他的余额和储蓄字段之间转移资金,并且还能够向他的愿望清单项目汇款。

例如:用户打开对话窗口,选择资金来源,选择资金用途,写入金额并提交。提交对话窗口后,主窗口中的余额将更新为新的正确值。

我的想法

在我的应用程序中,我应该能够从以下地址转账:(src -> dest)

(users.balance -> users.savings)
(users.savings-> users.balance)
(users.balance -> wishlist.balance)
(users.savings -> wishlist.balance)
(wishlist.balance -> users.savings)
(wishlist.balance -> users.balance)

用户在wishlist 中定义了项目,关系到用户有许多愿望清单项目。

我的想法是创建一个对话窗口,其中包含 2 列和 1 个字段用于金额。 2列中的数据应彼此相同。用户点击第一栏选择资金来源,点击第二栏选择目的地。

问题: 我应该使用什么(数据和视图模型)将数据填充到不同表的列中,并可以同时修改同一个表(用户)或单独(用户和愿望清单)中的余额值并保存到数据库?是否可以从多个数据源填充视图,然后能够正确保存修改后的值?它甚至是解决此类问题的正确方法还是我错过了解决此问题的更好方法?

【问题讨论】:

  • 你能解释一下这是什么意思吗:(users.balance -> users.savings) (users.savings-> users.balance) (users.balance -> wishlist.balance) (users.savings -> wishlist.balance) (wishlist.balance -> users.savings) (wishlist.balance -> users.balance)
  • 这些只是汇款说明(不是代码)。例如,用户的余额字段为 500,储蓄字段为 0。他将 250 转入储蓄,现在他有 250 的余额和 250 的储蓄。
  • 你的表是什么关系?为什么uid是用户的id?
  • 每个愿望清单项目都有 uid(用户的 id 字段),因为用户应该能够修改和只看到他的愿望清单项目

标签: c++ database qt sqlite


【解决方案1】:

我假设你需要的是这个:

QSqlQueryModel model;
model.setQuery("select users.balance, wishlist.balance ... from users, wishlist ... where .... ");
if (model.lastError().isValid())
    qDebug() << model.lastError();

ui->tableView->setModel(model)
//QTableView::setModel

有用吗?

【讨论】:

  • 我知道我可以通过这种方式从表中查询数据,但是我可以在模型中修改这些数据并将其保存到数据库吗?
  • 正如Mohammad Kanan所说,也许QSqlRelationalTableModel是最好的选择。
  • 你想要一个 qtableview 的可编辑单元格吗?并在编辑后自动更新模型。
  • QSqlQueryModel 类为 SQL 结果集提供只读数据模型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多