2017-09-30 152 views
1

我想將ClientDataSet保存到文件,然後在AdoQuery(AdoQuery.LoadFromFile())中打開此文件。 這可能嗎?Delphi,ADOQuery,ClientDataSet

或者如何將數據集保存爲pfADTG文件格式?

問候

帕維爾

+1

嘿!歡迎來到StackOverflow!請向我們提供您嘗試過的代碼以及您遇到的問題,以便我們能夠更好地幫助您!乾杯! –

回答

3

我想保存的ClientDataSet到文件,然後打開該文件中AdoQuery(AdoQuery.LoadFromFile())。可能嗎?

不會。TClientDataSet和TCustomAdoDataSet後代使用的文件格式(如TAdoQuery)在二進制版本或XML版本中不兼容。我想你可以嘗試使用Delphi的TXmlTransform將保存的CDS文件轉換爲Ado格式,但我從來沒有這樣做過。

或者如何將數據集保存爲pfADTG文件格式?

如果「數據集」是指TClientDataSet,則不能直接執行此操作。您可以做的最好的做法是逐個字段地逐行拷貝從CDS到AdoQuery,然後在AdoQuery上調用SaveToFile。

更新:在編輯這個答案時,我怕我不得不拒絕,你問如果你的AdoDataSet是空的並且沒有連接字符串該怎麼辦;那麼,當然可以使用TAdoDataSet來使用SaveToFile和LoadFromFile在本地存儲數據。下面是一個創建並填充ClientDataSet的簡約項目,然後將其結構和數據複製到AdoDataSet。

procedure TForm1.FormCreate(Sender: TObject); 
var 
    i : Integer; 
begin 
    // Note: ClientDataSet1 has had two FieldDefs created in the IDE, 
    // an ID integer field and an AName string field with a size of 20 

    // Create and populate ClientDataSet1 
    ClientDataSet1.CreateDataSet; 
    ClientDataSet1.InsertRecord([1, 'Name1']); 
    ClientDataSet1.InsertRecord([2, 'Name2']); 

    // Copy ClientDataSet1's FieldDefs to AdoDataSet1 
    AdoDataSet1.FieldDefs.Assign(ClientDataSet1.FieldDefs); 

    // Now, copy the data fielf-by-field, row-by-row 
    AdoDataSet1.CreateDataSet; 

    try 
    ClientDataSet1.DisableControls; 
    AdoDataSet1.DisableControls; 
    ClientDataSet1.First; 
    while not ClientDataSet1.Eof do begin 
     AdoDataSet1.Insert; 
     for i := 0 to ClientDataSet1.FieldCount - 1 do begin 
     AdoDataSet1.Fields[i].Value := ClientDataSet1.Fields[i].Value; 
     end; 
     AdoDataSet1.Post; 
     ClientDataSet1.Next; 
    end; 

    // Save Ado data to file, beware of path used! 
    AdoDataSet1.SaveToFile(ExtractFilePath(Application.ExeName) + 'AdoData', pfADTG); 

    finally 
    AdoDataSet1.EnableControls; 
    ClientDataSet1.EnableControls; 
    end; 
end;