Delphi 的断开连接的记录集/数据集

Disconnected Recordset / Dataset for Delphi

我有一个用 Delphi 7 编写的 3 层应用程序,它使用基于 WebBroker 的 SOAP 服务器(独立 exe),SOAP 客户端程序通过 HTTPRIO 组件进行通信。

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

我直接使用返回的记录集遍历它的行和字段(即不需要使用 DataSet 组件),因为多年来我在 Microsoft Access 中使用 VBA 编程,这是我很乐意做的事情. 幸运的是,也可以将它直接分配给 TADODataset 组件的 Recordset 属性,这样我就可以将它绑定到 QuickReport。

我现在想将我的客户端程序升级到 FireMonkey,以便我可以为 Windows 和 OSX 编译它,假设我将无法再使用 ADO Recordsets,在至少在 Mac 环境中不会。

在准备转换为 FireMonkey 时,最好的数据格式是什么? a) 断开连接并传输 "by hand", b) 加载到数据集组件中,以便我可以基于它生成报告,以及 c) 如果可能,在代码中处理数据而不必先将其加载到组件中?

这最后一项对我很重要,不仅因为我习惯于在不使用组件的情况下处理数据,还因为我经常在线程中请求数据以便在后台检索数据而不锁定用户界面.据我了解,组件和线程不在一起。

有什么关于最佳前进方向的建议吗?

我会传输一些 per-representation 值,例如真正的 XML 或 JSON,而不是一些二进制 base-64 编码的内容。并切换到 REST 方法,这在双方都比 SOAP 更容易实现。

然后您可以从 JSON 对象数组或 JSON 值数组填充 TDataSet(如果您不想将列名称作为对象传输线路上的字段名称)。

JSON/REST 的优点是您可以重复使用完全相同的服务器逻辑将其内容发布到 HTML5 javascript 客户端(移动或网络),或者第三方应用程序或服务。