• Qt 学习之路 2(58):编辑数据库外键


    Qt 学习之路 2(58):编辑数据库外键(skip)

    前面几章我们介绍了如何对数据库进行操作以及如何使用图形界面展示数据库数据。本章我们将介绍如何对数据库的数据进行编辑。 当然,我们可以选择直接使用 SQL 语句进行更新,这一点同前面所说的 model/view 的编辑没有什么区别。除此之外,Qt 还为图形界面提供了更方便的展示并编辑的功能。

    普通数据的编辑很简单,这里不再赘述。不过,我们通常会遇到多个表之间存在关联的情况。首先我们要提供一个 city 表:

    由于 city 表是一个参数表,所以我们直接将所需要的城市名称直接插入到表中。接下来我们创建 student 表,并且使用外键连接 city 表:

    我们重新创建 student 表(如果你使用的 RDBMS 支持 ALTER TABLE 语句直接修改表结构,就不需要重新创建了;否则的话只能先删除旧的表,再创建新的表,例如 sqlite)。

    这里需要注意一点,如果此时我们在 Qt 中直接使用

    语句,尽管我们的 city 中没有 ID 为 100 的记录,但还是是可以成功插入的。这是因为虽然 Qt 中的 sqlite 使用的是支持外键的 sqlite3,但 Qt 将外键屏蔽掉了。为了启用外键,我们需要首先使用QSqlQuery执行:

    然后就会发现这条语句不能成功插入了。接下来我们插入一些正常的数据:

    下面,我们使用 model/view 方式来显示数据:

    这段代码和我们前面见到的没有什么区别。我们可以将其补充完整后运行一下看看:

    带有外键的数据库数据的显示

    注意外键部分:City 一列仅显示出了我们保存的外键。如果我们使用QSqlQuery,这些都不是问题,我们可以将外键信息放在一个 SQL 语句中 SELECT 出来。但是,我们不想使用QSqlQuery,那么现在可以使用另外的一个模型:QSqlRelationalTableModelQSqlRelationalTableModelQSqlTableModel十分类似,可以为一个数据库表提供可编辑的数据模型,同时带有外键的支持。下面我们修改一下我们的代码:

    这段代码同前面的几乎一样。我们首先创建一个QSqlRelationalTableModel对象。注意,这里我们有一个setRelation()函数的调用。该语句说明,我们将第ColumnID_City列作为外键,参照于 city 表的 id 字段,使用 name 进行显示。另外的setItemDelegate()语句则提供了一种用于编辑外键的方式。运行一下程序看看效果:

    直接显示外键
    此时,我们的外键列已经显示为 city 表的 name 字段的实际值。同时在编辑时,系统会自动成为一个QComboBox供我们选择。当然,我们需要自己将选择的外键值保存到实际记录中,这部分我们前面已经有所了解。

  • 相关阅读:
    hdu 1402 大数A*B模板(FFT)
    ccpc 哈尔滨L题 LRU Algorithm
    今年得慢慢学的
    Codeforces Round #629 (Div. 3) E. Tree Queries(LCA)
    Codeforces Global Round 7 D2. Prefix-Suffix Palindrome (Hard version) -- manacher
    hdu 3068 (manacher算法)
    用Socket API建立简易tcp服务端和客户端
    Win下建立Socket时注意事项
    线段树(Segment Tree)
    Codeforces Round #643 (Div. 2)
  • 原文地址:https://www.cnblogs.com/okgogo2000/p/8393395.html
Copyright © 2020-2023  润新知