2012-11-12 24 views
2

這裏就是我試圖完成:如何在不應用掛起更新的情況下刷新TClientDataSet?

  1. 從數據庫中檢索記錄1通過將TSQLDataSet的CommandText:SELECT * FROM myTable的WHERE ID = 1
  2. 使用的TClientdataSet修改的記錄。 (1等待更新)
  3. 檢索下一條記錄。 SELECT * FROM myTable WHERE ID = 2
  4. 修改記錄。 (現在有2個待定更新)
  5. 最後,通過ApplyUpdates函數將2個未決更新發送回數據庫。

當我執行第3步時,我得到了「必須在刷新數據之前應用更新」。

如何在不應用掛起更新的情況下刷新TClientDataSet?

+0

'TClientDataSet'被設計來保存很多記錄。您一次使用它來拉取和修改一條記錄的方式似乎效率不高。拉兩個(全部)用戶需要修改的記錄是不是更好,讓用戶修改這些記錄,然後用'ApplyUpdates'全部一次性地將更新應用到數據庫? –

+0

@詹姆斯,如何處理一個數百萬的基本表/記錄集,將所有這些數據帶到客戶端修改一些記錄似乎效率更低。 – jachguate

+1

@jachguate - 我同意。但是,最有效的方法似乎是在提取更多數據之前應用更新。但是OP沒有解釋很多有關表格或爲什麼延遲(批量)更新很重要。如果延遲更新是必要的,那麼你的答案似乎是最好的解決方案。 –

回答

3

您可以手動將數據包附加到您的DataSet,並調用AppendData方法。

在一個應用中的供應商與ClientDataSet的相同的應用程序,你可以像這樣的代碼的東西:

begin 
    ConfigureProviderToGetRecordWithID(1); 
    //make the ClientDataSet fetch this single record and not hit the EOF. 
    ClientDataSet1.PacketRecords := 1; 
    ClientDataSet1.Open; 
    ClientDataSet1.Edit; 
    ModifyFirstRecord; 
    ClientDataSet1.Post; 
    ConfigureProviderToGetRecordWithID(2); 
    ClientDataSet1.AppendData(DataSetProvider1.Data, False); 
    //now you have two records in your DataSet without losing the delta. 
end; 

這是一種僞代碼,但顯示可以使用的通用技術。

+1

謝謝你的回答。我會試試這個,讓大家知道它是否有效:) – Heb

+0

Yahoo!有用!非常感謝@jachguate – Heb

+0

歡迎,@heb;) – jachguate

相關問題