Delphi XE2,DataSnap和Lookup Field的问题

时间:2012-02-01 16:10:45

标签: delphi field lookup datasnap

我在这里遇到了一些问题。我使用Delphi XE2 DataSnap技术在我的应用服务器中创建了一个lookupfield。在客户端,该字段变为TStringField。现在,问题是我放弃了客户端的查找功能。最重要的是,我无法更改客户端的字符串字段,因为它是只读的(即使我手动关闭只读属性)。

我不想在客户端查找表,因为我不希望客户端加载的所有数据只是为了支持查找。

我可以更改Key字段值,但是除非我应用更新并重新加载数据,否则stringfield查找文本不会更改。

用户希望看到文字更改。

我该怎么办?

2 个答案:

答案 0 :(得分:0)

似乎您必须检查您的GUI功能:查找字段实际上是客户端功能。它需要查找源 - 因此要在客户端上使用它,必须加载查找表。 DataSnap的人在这里非常好,在将它传输到客户端时将其转换为TStringField ......我会忽略它。

因此,如果查找表很大,则不应使用查找字段但搜索UI - 或自动完成组合框,您对DataSnap Server进行查询。也许你必须在组合框中手动编码,我不知道(看看JVCL是否有你可以用来快捷路径的东西)。

或者,如果查找表很少更新,您可以对其进行集中缓存,并具有检测更改的更新机制。因此,您可以按照创建方式使用查找字段。

答案 1 :(得分:0)

很久以前我遇到了这个问题,我找到了一个解决方案,这里有点复杂的分析,但我试着给出一些指导,直到我有时间写一篇详细的博客文章。 该想法包括由提供者打包的信息(涉及查询字段,如字段属性,数据集,提供者)作为服务器端的可选参数。 在客户端,派生 TClientDataset可以解压缩并处理这些信息,创建动态客户端数据集,检索所需的查找数据集并相应地设置它的查找字段。 由于派生的客户端数据集类中的嵌入式功能,该过程是透明的,唯一需要记住的是在提供程序的OnGetDatasetProperties事件中创建该信息,并在查找字段中将所有提供程序标志设置为false。