Delphi FireDAC:如何刷新缓存中的数据



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

LABTEST(id_test, dat_test, id_client, sample_typ)
SAMPLEType(id, SampleName)

在Delphi应用程序中,我使用TFDConnection和1 TFDQuery(在缓存的更新中(,在其中我连接了两个表,脚本是:

"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中查找的valus的值。根据UI控件的不同,这可能是一个"LookupField"或类似的字段。

您还可以使用适配器将主数据存储在TFDMemTable中——您可以指定不同的TFD命令来读取整个记录集、刷新记录、更新、插入和删除记录。TFD命令可以针对这样的联接记录集作用于多个表。当你发布个人记录时,它会自动为你刷新

最新更新