2017-08-04 69 views
1

我有一個數據集TclientDataSet其中的字段是由代碼創建的。 我需要用戶在保留現有數據的同時附加其他字段。如何在沒有CreateDataset的情況下將新字段添加到數據集?

`MYclientDataSet.FieldDefs.Add(s, ftString, 20); 
MYclientDataSet.CreateDataset; 
MYclientDataSet.Open; 
MYclientDataSet.edit; 
MYclientDataSet.FieldByName(s).AsString := 'Test'; 
MYclientDataSet.post;` 

這可以工作,但CreateDataset會擦除所有數據。 有什麼方法將新字段添加到數據集?

我已經嘗試了許多其他的解決方案,但沒有一個似乎工作

千恩萬謝

+0

您可以加入有關您的其他解決方案一些細節已經嘗試過? –

回答

1

如果你問fkData類型的字段,即那些這將被包含在所保存的數據的CDS,可以不加這些字段一旦CDS已經打開。

我知道達到同等效果的最簡單方法是

  1. 保存CDS數據XML。

  2. 修改定義fkData字段的XML中的元數據,以添加所需的元數據。

  3. 保存XML。

  4. 重新從XML中加載CDS。

我想我貼的如何做到這一點的答覆的SO q中的前一段時間的例子。如果我能找到它,我會在稍後添加一個鏈接。

4

您可以用下面的代碼,基本上保存當前數據實現這一目標,創造新場結構,並複製保存的數據回:

var 
    cds: TClientDataSet; 
begin 
    cds := TClientDataSet.Create(nil); 
    try 
    cds.Data := MyClientDataSet.Data; 
    MyClientDataSet.Close; 
    MyClientDataSet.FieldDefs := cds.FieldDefs; 
    MyClientDataSet.FieldDefs.Add('Note', ftString, 20); 
    MyClientDataSet.CreateDataSet; 
    cds.First; 
    while not cds.Eof do begin 
     MyClientDataSet.Append; 
     MyClientDataSet.CopyFields(cds); 
     MyClientDataSet.FieldByName('Note').AsString := 'Test'; 
     MyClientDataSet.Post; 
     cds.Next; 
    end; 
    finally 
    cds.Free; 
    end; 
end; 
+0

這工作正常。在檢查XML文件的內容時,由於我在關閉應用程序之前使用了savetofile,所以'MyClientDataSet.Post;'插入了一行額外的數據。所以郵件被刪除了 –

相關問題