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

标签 delphi soap tclientdataset

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

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

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

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

在准备转换为 FireMonkey 时,我可以使用的最佳数据格式是什么
a) “手动”断开和传输,
b)加载到数据集组件中,以便我可以基于它生成报告,并且
c) 如果可能,在代码中处理数据而不必先将其加载到组件中?

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

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

最佳答案

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

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

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

关于delphi - Delphi 的断开连接的记录集/数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40836430/

相关文章:

delphi - Indy 将 Memorystream 上传到 FTP

multithreading - 从互联网下载文件,同时能够随时中止下载

WCF 服务通过 https 而不是 http 返回 404

delphi - TBlobField.OldValue 在 BeforeUpdateRecord 和 AfterUpdateRecord 事件中始终显示 null

ios - Delphi Datasnap 连接错误与 IPv6 (iOS)

soap - 可以在micronaut中创建SOAP服务吗?

python - 为什么在使用 python suds 连接到 Microsoft CRM 时出现连接错误/超时?

delphi - TClientDataSets 的 'invalid field type' 错误我不明白

delphi - Delphi 7 CopyFile函数中的错误:the filename directory name or volume label syntax is incorrect,

delphi - 如何使用Delphi中的WinAPI按名称查找组合框项目的索引?