更改键值后刷新查找字段值

Refreshing a lookup field value after key value change

提问人:Stalkium 提问时间:10/8/2020 最后编辑:Mark RotteveelStalkium 更新时间:7/22/2021 访问量:915

问:

我有两张表:

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

DepName是一个查找值,它使用哪些引用进行检索。DEPARTMENTS.NameDEPIDDEPARTMENT.Index

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

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

  • Rad Studio XE 东京,
  • 火鸟 3.0,
  • FireDac 组件 (TFDQuery),
德尔福 火鸟 FireDAC Lookupfield

评论

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

答:

0赞 Atreide 4/15/2021 #1

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

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