2016-11-28 76 views
2

我有一个使用基于WebBroker的SOAP服务器(独立exe文件)与SOAP客户端程序通过HTTPRIO组件进行通信的Delphi 7编写的3层应用程序。德尔福断开连接的记录集/数据集

这不是DataSnap应用程序。相反,服务器将数据作为ADTG格式的断开ADO记录集发送到客户端,ADTG格式与传入SOAP请求的SQL字符串相对应。 (服务器首先压缩它并将其转换为Base64,以便作为“字符串”结果轻松传输回客户端。)

我使用返回的记录集直接遍历其行和字段(即不需要使用DataSet组件),因为在Microsoft Access中使用VBA进行多年编程,我感到很舒服。 幸运的是,也可以将其直接分配给TADODataset组件的Recordset属性,以便将其绑定到QuickReport。

我现在想将我的客户端程序升级到FireMonkey,以便我可以为Windows和OSX编译它,并且假设我不能够使用ADO记录集,至少在Mac环境中不行。

在用于转换到FireMonkey制备,这将是我可以 a)断开和发送“手动”, B)负载到一个数据集组件,这样我可以基于它报告的最佳的数据格式,并c)如果可能的话,通过代码中的数据工作,而不必首先将其加载到组件中?

这最后一项对我来说很重要,不仅仅因为我习惯于不使用组件而使用数据,而且因为我经常在线程中请求数据以便在后台检索它而不锁定用户界面。据我了解,组件和线程不会在一起。

任何有关最佳前进方向的建议?

+0

组件和线程没有问题。从线程访问的* visual *组件存在问题,但数据集组件不是可视的。你的问题对我来说是相当宽泛和有点模糊的,但看起来你可能正在寻找TClientDataSet。 –

+0

@KenWhite你好[这里](http://chat.stackoverflow.com/rooms/129020/rad-studio-for-android) – Sami

+0

是的。谢谢肯。 TClientDataSet肯定似乎是最好的方式。 –

回答

1

我会去发送一些每个表示值,例如,真正的XML或JSON,而不是一些二进制base-64编码内容。并切换到REST方法,这比SOAP更容易实现。

然后,您可以从对象的JSON数组或JSON数组值中填入TDataSet(如果您不想通过导线传输列名作为对象字段名称)。

JSON/REST的优势在于,您可以重新使用相同的服务器逻辑将其内容发布到HTML5 JavaScript客户端(移动或Web)或第三方应用程序或服务。

+0

使用JSON也是我最后决定的,在给了它更多的思考之后。数据将作为数组(列/值)的数组(行)发送。对于需要使用TDataSet(即用于报告)的时候,我只需要“手动”填充数据集的行。一次一排,这不是一个大问题。 –