【问题标题】:PHP append to ClientDataSet CDS FilePHP 附加到 ClientDataSet CDS 文件
【发布时间】:2012-06-05 06:09:39
【问题描述】:

我有一个空的 Delphi ClientDataSet CDS 文件设置,其中包含我需要的所有列/标题/数据类型。我想使用 PHP 将关联数组附加到 CDS 行中。这可能吗?

数组可以是:

{
    1: {Name:Captain, Phone:18001234567}
    2: {Name:Jack, Phone:18009876543}
    3: {Name:Sparrow, Phone:18887892345}
}

我选择 PHP 是因为我精通该语言,而且我的 Web 服务器是一个共享的 Linux 主机。基本上我不能在这里运行Delphi。我对可以在这种环境下工作的其他选项持开放态度。谢谢!

编辑:

请参阅这篇文章中的 cmets 了解我的分辨率。

【问题讨论】:

  • +1 提出了一个很好的问题。 TClientDataSet 是一个非常专有的 Delphi/C++Builder 本地数据集(用 C++ 编写),在最近的 RAD Studio 版本包含源代码之前,该格式从未发布过。我不知道有任何方法可以从任何其他语言或平台访问它。我原以为如果可能的话,他们会把它包含在 RadPHP 中,但是(至少就 XE2 而言)他们没有。
  • 顺便说一句,您是否考虑过在 Wine 下运行 Delphi 应用程序,并在它和您的 PHP 代码之间进行工作?它应该很容易实现,因为您只是在谈论数据通信,而不是处理 UI 或操作系统级别的工作。
  • 您的 json 数据不是数组。数字标识符在 delphi 中可能无效。
  • 我想您已经决定不能以 XML 格式(而不是默认的专有二进制文件)保存 CDS 并以这种方式使用它? (当然你有;如果你可以只使用 XML,你就不需要 CDS。)抱歉;在这一点上,我没有建议。我能想到的唯一 Linux 替代品是 FreePascal(不支持 CDS)或旧版本的 Kylix(需要企业或架构 SKU,IIRC,才能支持 CDS - pro 没有包含它)。跨度>
  • 不幸的是,我不确定 Delphi 是否使用标准的 binary_XML 编码。 CDS 在那之前就已经存在了,我想,我怀疑当时 Borland 推出了自己的产品。在他们成为 Inprise, IIRC 之前,这是他们“我们做客户端-服务器应用程序”的一部分。

标签: php database arrays delphi tclientdataset


【解决方案1】:

我建议您不要直接写入 cds 文件。

相反,您可以为两个应用程序(PHP 和 Delphi)使用通用 xml,在 delphi 端,您可以使用带有TXmlTransformProvider 的 XML 转换来加载和保存它,而在 PHP 端,您只需像往常一样将其写入 XML做。

看看here如何在delphi上设置。

--更新

如果您确实需要直接更改 cds 文件(使用 xml 格式),您可以在 cds 文件中添加一个新的,因为 cds 格式是 xml,如下所示:

<?xml version="1.0" standalone="yes"?>  
<DATAPACKET Version="2.0">
    <METADATA>
        <FIELDS>
            <FIELD attrname="Name" fieldtype="string" WIDTH="24"/>
            <FIELD attrname="Capital" fieldtype="string" WIDTH="24"/>            
        </FIELDS>
        <PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="2057"/>
    </METADATA>
    <ROWDATA>
        <ROW Name="Argentina" Capital="Buenos Aires"/>
        <ROW Name="Bolivia" Capital="La Paz"/>
        <ROW Name="Brazil" Capital="Brasilia"/>
        <ROW Name="Canada" Capital="Ottawa"/>        
        <ROW Name="United States of America" Capital="Washington"/> 
        //Add your new ROW tag here with your data       
    </ROWDATA>
</DATAPACKET>

【讨论】:

  • 我想自动创建 CDS 文件(我需要每年创建数百个)。我想创建它们而不必启动 Delphi 并单独处理每个......如果迫在眉睫,我可能不得不走这条路
  • 这样,我说过你甚至不需要 CDS 文件,只需要 xml 文件。客户端数据集将直接处理 xml 内容。
  • 我仍然需要 CDS 文件,因为我将它与闭源第三方软件一起使用。如果它是我自己的,我可以在 TXmlTransformProvider 支持中编写代码。很遗憾,我不能在这种情况下。感谢您的意见。
  • 现在我看到了你的问题,这样你就可以在 cds 文件中的 ROWDATA 标记中添加一个带有数据的新 ROW 标签。
猜你喜欢
  • 2012-06-05
  • 2018-09-10
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 2012-07-25
  • 2019-04-29
  • 2011-08-24
相关资源
最近更新 更多