2012-11-20 70 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')。如果您在原始問題中提到過,我也可以在我的答案中提到這一點。 –