【问题标题】:Refreshing a lookup field value after key value change键值更改后刷新查找字段值
【发布时间】:2020-10-07 20:03:28
【问题描述】:

我有两张桌子:

  • DEPARTMENTS(索引、名称)
  • EMPLOYEES(索引、名称、DEPID、DepName)

DepName 是一个查找值,它使用引用DEPARTMENT.IndexDEPID 检索DEPARTMENTS.Name

使用显示EMPLOYEES 表的DBGrid 时,在更改DEPID 值后,记录的DepName 不会更新,并且在我重新运行查询之前不会反映更改!

有没有办法做到这一点并让查找值实时反映更改?

  • Rad Studio XE 东京,
  • 火鸟 3.0,
  • FireDac 组件 (TFDQuery),

【问题讨论】:

  • DEPID 在哪里更改 - 在 DataSet 或 DB 表中?如果您使用 SELECT 和 JOIN 从 EMPLOYEES 检索数据 - 最简单的方法是重新运行查询。
  • 我从不喜欢 DBGrid 的工作方式。这就是为什么我总是使用 StringGrid 并在 DataModule 的方法中处理所有相关的数据库内容的原因。这种单独的数据表示(用户界面、网格)和数据模型(数据模块)使程序更加清晰、易于理解和可维护。我根据用户操作使用网格中的事件来刷新它。当然,我设法不重新运行填充所有表格的查询,只有一个小查询来获取修改单元格的数据。
  • When using a DBGrid displaying the EMPLOYEES table, and after changing DEPID value 这是为类似表格的“ISAM”数据存储而设计的。像 Excel 等。没有事务,没有查询语言等。这与客户端-服务器模型确实不同。也许您需要“公文包”方法,您制作相关数据库信息的小副本,对其进行编辑,然后尝试将所有更改上传到数据库中。当然,这增加了“过时数据”冲突的可能性。 TClientDataSet 及其来自DataSnap/MIDAS 家族的朋友被要求在 Delphi 中实现此模型
  • 这里有同样的问题,但不涉及 DBGRID。我确实有一个带有查找字段的 TFDQuery,当我更改键值时,查找字段仍然存在。没有 ISAM 系统、Postgres 数据库,它在许多其他 TFDQueries 中都能正常工作。我尝试了 TFIELD.RefreshLookupList 没有任何改进。不会抛出任何错误,它会为查找字段恢复一个值,但不会恢复与键字段对应的值。
  • 我遇到的问题是在插入 TFDQuery (FDQ_Detail) 并通知键字段时,查找字段不会跟随该键。我做了 FDQ_Detail.Post 并且查找字段正确刷新。为了继续编辑记录,我以正确的方式进行了 FDQ_Detail.Edit 并且它起作用了。我不会把它作为答案,因为它看起来确实是一种奇怪的方式。但它确实奏效了。

标签: delphi firebird firedac lookupfield


【解决方案1】:

如果您可以执行 EMPLOYEES.Post,则查找字段应正确刷新。为了继续编辑记录,您可以再次执行 EMPLOYEES.Edit。这可能不是正确的方法,但它确实对我有用。

您可以尝试 CalcField.RefreshLookupList,这看起来是准确的方法,但它不适用于我在 Delphi XE6 上使用 fireac 对带有缓存更新的 Postgres 数据库。

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2013-10-28
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    相关资源
    最近更新 更多