2011-09-23 59 views
2

我有一個簡單的TClientDataSet組件,用於填充一些數據感知組件。但是,如果我使用這個數據集將數據插入到數據庫中,我似乎無法找到正確的方法將其同步回到我的TClientDataSet組件中。如何在不知道的情況下更改對數據庫所做更改的TClientDataSet?

我該如何做到這一點?

+1

連接組件中存在一個事件,無論是在TDatabase還是TDBConnection – Johan

+0

您的問題不是很清楚。你似乎在談論多個數據集,但只提到一個TClientDataSet。你如何將數據插入數據庫?通過TClientDataSet? – LachlanG

回答

3

TClientDataSet組件有一個Refresh方法。不過,花了一些時間讓我在文檔中發現這一點。 :)

從文檔:

從db.pas單元

程序刷新;

從數據庫中重新獲取數據以更新數據集的數據視圖。

呼叫刷新以確保應用程序具有來自數據庫的最新數據。例如,當應用程序關閉對數據集的過濾時,應立即調用Refresh來顯示數據集中的所有記錄,而不僅僅是那些用於滿足過濾條件的記錄。

注意:Refresh方法不適用於所有TDataSet後代。特別是,如果查詢不是「活的」,TQuery組件不支持Refresh方法。要刷新靜態TQuery,請關閉並重新打開數據集。 TDataSet在刷新記錄之前生成BeforeRefresh事件,之後生成AfterRefresh事件。

注意:大多數數據集嘗試在調用刷新時保持當前記錄位置。但是,這並非總是可行的。例如,當前記錄可能已被其他用戶從服務器上刪除。單向數據集無法在刷新後查找當前記錄,並始終移回第一條記錄。

警告:單向數據集通過關閉並重新打開遊標來刷新數據。例如,如果您在BeforeClose,AfterClose,BeforeOpen或AfterOpen事件處理程序中有代碼,則可能會產生意外的副作用。

0

基本上,您必須關閉TClientDataset然後打開它,以與原來相同的方式從數據庫加載數據。如果TClientDataset連接到TDataSetProvider(連接到TDataset/TQuery後代),則只需關閉TClientDataset,然後打開它。

+0

這可行,但它不是最佳的方式來做到這一點。 – ivarec

2

關閉和打開CDS不適用於我。我正在使用Delphi XE2 Update 3,並將ADO表連接到Access 2007數據庫。我可以刷新我的CDS中的數據的唯一方法是:

procedure TForm1.PeopleRefreshButtonClick(Sender: TObject); 
// this actually re-loads the data from the table! 
begin 
    DM1.PeopleTable.Close; 
    DM1.PeopleTable.Open; 
    DM1.PeopleCDS.Refresh; 
end; 

表單上的刷新按鈕關閉,然後打開表格。然後我刷新ClientDataSet。

相關問題