【问题标题】:Convert Delphi ClientDataSet to dfXML将 Delphi ClientDataSet 转换为 dfXML
【发布时间】:2012-11-20 01:02:34
【问题描述】:

我刚刚安装了 Delphi 7 供个人使用,我正在尝试将 delphi ClientDataSet 文件转换为 dfXMLUTF8。我真正需要的是xml结构。 This site 建议运行 4 行代码将生成我想要的输出。但请注意,我的文件是 .cds,而不是示例中的 .dat。我不知道这是否会有所作为。

ClientDataSet1.Active := false;
ClientDataSet1.CreateDataSet;
ClientDataSet1.LoadFromFile('MyBinaryFile.dat');
ClientDataSet1.SaveToFile('MyXMLFile.XML', dfXMLUTF8);

我收到错误,因为我以前从未真正使用过 Delphi,我希望知道他们在做什么的人可以为我发布 非常短 xml 结构。 Here's the file(486 bytes) 我正在合作。我将用完整的 dfXMLUTF8 输出奖励第一个海报的正确答案。谢谢!

更新

好的,我刚刚从头开始这个项目,我想我已经进行了一些设置。我添加了uses DBClient;var ClientDataSet1: TClientDataSet,最后添加了程序:

ClientDataSet1.LoadFromFile('C:\Documents and Settings\XPMUser\Desktop\DelphiCDS\Master.cds');
  ClientDataSet1.SaveToFile('C:\Documents and Settings\XPMUser\Desktop\DelphiCDS\output.XML', dfXMLUTF8);

它会抛出以下错误:

模块“Project.exe”中地址 004588B6 的访问冲突。阅读 地址 00000000。

更新2

这是我最终得到的结果:

unit Script3;

interface

uses
  Forms, DBClient;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;
  CDS: TClientDataSet;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CDS := TClientDataSet.Create(nil);
  try
    CDS.LoadFromFile('.\input.cds');
    CDS.SaveToFile('.\output.xml', dfXMLUTF8);
  finally
    CDS.Free;
  end;
end;

end.

【问题讨论】:

  • 当您说“我收到错误”时,如果您在问题文本中实际提供错误,这将非常有用,因为我们无法从哪里看到您的屏幕我们是。请编辑您的问题并提供您收到的确切错误消息。谢谢。
  • 我在下面的回答中为您提供了关于如何在代码中创建和使用TClientDataSet特定代码。如果您遇到访问冲突,则说明您没有使用我发布的代码。请再读一遍;您显然错过了其中的 CDS := TClientDataSet.Create(nil)CDS.Free; 部分。

标签: xml delphi data-structures tclientdataset


【解决方案1】:

为了完成转换,您所做的远远超出了您必须做的。假设MyBinaryFile.dat实际上是一个二进制格式的Delphi TClientDataSet文件,这两行代码(无需额外设置)将起作用:

ClientDataSet1.LoadFromFile('D:\Temp\MyBinaryFile.dat');
ClientDataSet1.SaveToFile('D:\Temp\MyXMLFile.xml', dfXMLUTF8);

如果不知道更多关于您的MyBinaryFile.dat 是什么,也没有关于您遇到的错误的信息,那么很难提供更多信息。在 Delphi 7 中测试并使用标准 animals.cds(来自 Windowx XP 虚拟机上安装的标准 D7 中的 C:\Program Files\Common Files\Borland Shared\Data)。

从您下面的评论看来,当您尝试在代码中创建它时,您遇到的实际问题是关于未识别标识符 TClientDataSet 的编译器错误。如果您有足够高的 SKU 用于 Delphi 7,包括 TClientDataSet(IIRC、Professional 和更高版本),您只需将 DBClient 添加到您的 uses 子句:

implementation

uses 
  DBClient;

procedure TForm1.FormShow(Sender: TObject);
var
  CDS: TClientDataSet;
begin
  CDS := TClientDataSet.Create(nil);
  try
    CDS.LoadFromFile('MyBinaryFile.dat');
    CDS.SaveToFile('MyXMLFile.xml', dfXMLUTF8);
  finally
    CDS.Free;
  end;
end;

或者,更好的是,如果您正在创建 VCL 表单应用程序,只需在表单上添加 TClientDataSet;您可以在组件面板的DataAccess 选项卡上找到它。

【讨论】:

  • 我是一个绝对的初学者。我正在声明 [code]var ClientDataSet1: TClientDataSet;[/code] 并接收未声明的标识符 TClientDataSet。
  • 我的实际 CDS 文件链接在我的开场问题上。我只是对德尔福一无所知。 CLientDataSet1 应该是什么变量类型?
  • 如果 TClientDataSet 在您使用的 Delphi 7 版本中可用(Professional 和更高版本的 SKU,IIRC),只需在您的 uses 子句中添加 DBClient。 (或者从组件面板中的DBAccess 选项卡中将TClientDataSet 放在您的表单上。)如果您在最初的问题中提到了这一点,我也可以在我的回答中解决这个问题。
  • 好吧,我想我添加的正确。如何运行此脚本? “运行”显示为灰色。
  • Delphi 不是脚本语言。它是一种编译的编程语言,可以创建本机 Win32 可执行文件。您需要将代码放入项目中(文件|新建|VCL 表单应用程序或文件|新建|其他|控制台应用程序),然后编译并运行该项目。 StackOverflow 不是编程教程网站。您需要找到一个教授基础知识的网站。试试Delphi AboutMarco Cantu's site
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多