DelphiXE2、DataSnap和Lookup字段的问题



我有点问题。我已经使用DelphiXE2DataSnap技术在应用程序服务器中创建了一个查找字段。在客户端,该字段变为TStringField。现在,问题是我失去了客户端的查找功能。最重要的是,我不能更改客户端的字符串字段,因为它是只读的(即使我手动关闭只读属性)。

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

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

用户希望看到文本更改。

我该怎么办?

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

因此,如果查找表那么大,则不应该使用查找字段,而应该使用搜索UI或自动完成组合框,您可以对DataSnap Server进行查询。也许你必须在combobox的情况下手动编码,我不知道(看看JVCL是否有可以用来缩短路径的东西)。

或者,如果查找表很少更新,则可以对其进行攻击性缓存,并使用更新机制来检测更改。因此,您可以按照创建查找字段的方式使用这些字段。

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

最新更新