【发布时间】:2020-10-07 20:03:28
【问题描述】:
我有两张桌子:
-
DEPARTMENTS(索引、名称) -
EMPLOYEES(索引、名称、DEPID、DepName)
DepName 是一个查找值,它使用引用DEPARTMENT.Index 的DEPID 检索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