gpt4 book ai didi

德尔福 FireDAC : how to refresh data in cache

转载 作者:行者123 更新时间:2023-12-04 07:56:56 24 4
gpt4 key购买 nike

我需要刷新缓存更新中的 TFDQuery 中的数据。
为了简化我的问题,假设我的 MsACCESS 数据库由我必须加入的 2 个表组成。

LABTEST(id_test, dat_test, id_client, sample_typ)
SAMPLEType(id, SampleName)
在 Delphi 应用程序中,我使用了 TFDConnection 和 1 个 TFDQuery(在缓存更新中),其中我加入了 2 个表,其脚本是:
"SELECT T.id_test, T.dat_test, T.id_client, T.sample_typ, S.SampleName
FROM LABTEST T
left JOIN SAMPLEType S ON T.sample_typ = S.id"
在我的应用程序中,我还使用 DBGrid 来显示查询结果。
和一个按钮来编辑字段“sample_typ”,如下所示:
qr.Edit;
qr.FieldByName('sample_typ').AsString:=ce2.text;
qr.Post;
'sample_typ' 字段的版本工作正常,但相应的 'sampleName' 字段在更新后没有改变(在网格中)。
事实上它并没有刷新!
问题在这里:如果我刷新查询,则会引发异常:“无法刷新数据集。必须提交或取消缓存的更新
和批处理模式在刷新前终止”
如果我提交更新,数据将被发送到数据库,我不希望那样,我需要将数据保存在缓存中直到操作结束。
此外,如果我退出缓存,数据将在网格中刷新,但会在 qr.post 之后发送到数据库,我不希望那样。
我需要刷新缓存中的数据。解决办法是什么 ?
提前致谢。

最佳答案

问题归结为这样一个事实,即您没有告诉您的 UI 对这两个字段有任何依赖性 - 它显然无法知道如何在不重新提交的情况下进行连接,因此如果您不想发送更新和重新加载你会遇到问题。
目前尚不清楚您要做什么,但这两个想法可能对您有所帮助。
如果您不打算编辑 SAMPLEType 表 (S) 中的字段,则将该表中的值加载到查找表中。您可以将其加载到 TFDMemTable 中。您可以使用从查询加载的适配器。然后,您的 UI 控件可以根据在本地 TFDMemTable 中查找的值显示该值。根据 UI 控件,这可能是“LookupField”或类似的。
您还可以使用适配器将主要数据存储在 TFDMemTable 中 - 您可以指定不同的 TFDCommands 来读取整个记录集、刷新记录、更新、插入和删除记录。 TFDCommands 可以作用于多个表的连接记录集,就像这样。这将在您发布时自动为您刷新个人记录。

关于德尔福 FireDAC : how to refresh data in cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66653817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com