Delphi XE2、DataSnap和查找字段存在问题

Delphi XE2、DataSnap和查找字段存在问题,delphi,field,lookup,datasnap,Delphi,Field,Lookup,Datasnap,我这里有点问题。我已经使用Delphi XE2 DataSnap技术在我的应用服务器中创建了一个查找字段。在客户端,该字段变为TStringField。现在,问题是我失去了客户端的查找功能。最重要的是,我不能在客户端更改stringfield,因为它是只读的,即使我手动关闭只读属性 我不想在客户端查找表,因为我不想在客户端加载所有数据来支持查找 我可以更改键字段值,但stringfield查找文本不会更改,除非我应用更新并重新加载数据 用户希望看到文本更改 我该怎么办?似乎您必须检查GUI功能:

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

我不想在客户端查找表,因为我不想在客户端加载所有数据来支持查找

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

用户希望看到文本更改


我该怎么办?

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

因此,如果查找表太大,则不应使用查找字段,而应搜索UI或自动完成组合框,以便对DataSnap服务器进行查询。也许你必须在combobox的情况下手动编码,我不知道JVCL是否有你可以使用的快捷路径


或者,如果查找表很少更新,您可以主动缓存它,并使用更新机制来检测更改。因此,您可以按照创建查找字段的方式使用这些字段。

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

如何在普通的非DataSnap应用程序中写入查找字段?非DataSnap是易于理解的您创建了一个查找字段,仅此而已。然而,对于Datasnap,如上所述,这是一件完全不同的事情。嘿,Fabricio,这让我同时感到高兴和悲伤!不管怎样,这就是我所做的。我已经放弃了查找字段。相反,我在客户端创建了一个Calc字段。在calc上,我调用了一个服务器函数,该函数根据客户机的数据查找所需的值。实际上效果很好。我想它是“零碎的”,但你能做什么呢-查找字段是一种使配置查找控件更容易的功能,但与TDbLookupComboBox的工作原理没有什么不同。它需要一个源数据源和一个查找数据源。它从原点获取一个字段的“Key”值,并在查找源上搜索链接字段“Lookup Key”,如果找到,则在lookupfield上显示另一个字段“Display”字段的值。这已经没有什么魔力了顺便说一下,你会接受这个答案吗-我就是这么做的。我编写了一个函数,它接受tablename、fieldname、fieldvalue和returnfieldname。唯一的问题是,每次调用calc field事件时,它都会调用服务器,但负载可以忽略不计:-我写了这篇博文并出版了图书馆。这里是“LookCDS”,一个用于Delphi的函数、类和组件的小型库集,它在客户端启用和利用datasnap远程模块中定义的查找字段。