2012-11-20 72 views
0

我刚刚安装了Delphi 7 for Personal Use,并试图将delphi ClientDataSet文件转换为dfXMLUTF8。我真正需要的是xml结构。 This site建议运行4行代码将生成我想要的输出。请注意,我的文件是.cds,而不是.dat,如示例中所示。我不知道这是否有所作为。将Delphi ClientDataSet转换为dfXML

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

我收到错误,因为我从来没有真正使用德尔福之前,我希望有人谁知道他们在做什么,可能只是张贴很短 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); 

它引发以下错误:

Access violation at address 004588B6 in module 'Project.exe'. Read of address 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. 
+0

当您说“我收到错误”时,如果您在问题文本中实际提供了**错误**,这非常有用,因为我们无法从我们所在的位置看到您的屏幕。请编辑您的问题,并提供您正在收到的**确切**错误消息。谢谢。 –

+0

我给你**特定的代码**关于如何在我的答案下面的代码中创建和使用'TClientDataSet'。如果你得到访问违规,你没有使用我发布的代码。请再读一遍;你显然错过了'CDS:= TClientDataSet.Create(nil)'和'CDS.Free;'部分。 –

回答

6

You'r为了完成转换,你做得比你要做得更多。与实际上是一个二进制格式的Delphi TClientDataSet文件推定的这两行代码(无需额外设置)将工作:

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

不知道更多关于你的是什么,并没有关于错误的信息你越来越难以提供更多的信息。测试并使用Delphi 7中的标准animals.cds(从C:\Program Files\Common Files\Borland Shared\Data以Windowx XP虚拟机上的标准D7安装)进行测试和工作。

看起来,从您的评论如下,您遇到的实际问题是编码器错误关于未识别的标识符TClientDataSet当您尝试并在代码中创建它。如果你有足够高的SKU为Delphi 7,包括TClientDataSet(IIRC,专业及以上),你可以添加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; 

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

+0

我是一个绝对的初学者。我声明[code] var ClientDataSet1:TClientDataSet; [/ code]并接收未声明的标识符TClientDataSet。 – skibulk

+0

我的实际CDS文件与我的开场白问题有关。我只是不知道关于Delphi的一件事情。 CLientDataSet1应该是什么变量类型? – skibulk

+1

如果您正在使用Delphi7版本中的TClientDataSet(专业版和更高版本的SKU,IIRC),只需将'DBClient'添加到您的使用条款中即可。 (或者从组件面板的'DBAccess'选项卡中在表单中放置一个'TClientDataSet')。如果您在原始问题中提到过,我也可以在我的答案中提到这一点。 –