0

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

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

我收到错误,因为我以前从未真正使用过 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);

它抛出以下错误:

模块“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.
4

1 回答 1

6

为了完成转换,您所做的比您必须做的要多得多。假设MyBinaryFile.dat实际上是二进制格式的 DelphiTClientDataSet文件,这两行代码(无需额外设置)将起作用:

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

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

从您下面的评论看来,您遇到的实际问题是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 Forms 应用程序,只需TClientDataSet在您的表单上放一个;您会DataAccess在组件面板的选项卡上找到它。

于 2012-11-20T01:14:59.953 回答