将Delphi ClientDataSet转换为dfXML

ski*_*ulk 0 xml delphi tclientdataset data-structures

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

ClientDataSet1.Active := false;
ClientDataSet1.CreateDataSet;
ClientDataSet1.LoadFromFile('MyBinaryFile.dat');
ClientDataSet1.SaveToFile('MyXMLFile.XML', dfXMLUTF8);
Run Code Online (Sandbox Code Playgroud)

我收到错误,因为我之前从未真正使用过Delphi,我希望有人知道他们在做什么,只能为我发布非常短的 xml结构.这是我正在使用的文件(486字节).我将使用完整的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);
Run Code Online (Sandbox Code Playgroud)

它会引发以下错误:

模块"Project.exe"中地址004588B6的访问冲突.读取地址00000000.

Update2:

这是我最终得到的:

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.
Run Code Online (Sandbox Code Playgroud)

Ken*_*ite 6

为了完成转换,你所做的远不止这些.假设MyBinaryFile.dat实际上是一个二进制格式的Delphi TClientDataSet文件,这两行代码(没有额外的设置)将起作用:

ClientDataSet1.LoadFromFile('D:\Temp\MyBinaryFile.dat');
ClientDataSet1.SaveToFile('D:\Temp\MyXMLFile.xml', dfXMLUTF8);
Run Code Online (Sandbox Code Playgroud)

如果不了解您的MyBinaryFile.dat情况,并且没有关于您所获得的错误的信息,则很难提供更多信息.测试并使用animals.cdsDelphi 7 C:\Program Files\Common Files\Borland Shared\Data中的标准(来自Windowx XP虚拟机上的标准D7安装).

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

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;
Run Code Online (Sandbox Code Playgroud)

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