【问题标题】:Disconnected Recordset / Dataset for DelphiDelphi 的断开连接的记录集/数据集
【发布时间】:2016-11-28 02:41:57
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 组件和线程没有问题。从线程访问 visual 组件存在问题,但数据集组件不是可视的。您的问题在我看来非常广泛且有些模糊,但您可能正在寻找 TClientDataSet。
  • @KenWhite 你好here
  • 是的。谢谢肯。 TClientDataSet 似乎是最好的选择。

标签: delphi soap tclientdataset


【解决方案1】:

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

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

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

【讨论】:

  • 在仔细考虑之后,我最终也决定使用 JSON。数据将作为数组(列/值)的数组(行)发送。当我确实需要使用 TDataSet(即用于报告)时,我只需要“手动”填充数据集的行,即。一次一行,这不是什么大问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多