2011-10-06 57 views
2

我在使用ClientDataSet.StatusFilter := [usDeleted]時遇到了一些困難。
它什麼都不做。我讓我的ClientDataSet連接到一個Provider。
應用StatusFilter時,DataSet不顯示已刪除的記錄。
它只是顯示應用StatusFilter之前的記錄。ClientDataSet上的StatusFilter

另一方面。如果我使用的ClientDataSet.CreateDataSet未連接到提供程序,並且只使用ClientDataSet作爲內存中的數據集,那麼StatusFilter的工作方式與文檔中描述的相同。
DataSet只顯示已刪除的記錄。
ClientDataSet.UpdateStatus還顯示usDeleted的正確狀態。

我可以讓我的第一個連接到提供程序的ClientDataSet顯示已刪除的記錄的唯一方法是使用ClientDataSet.Delta屬性。但是這不允許我恢復已刪除的記錄。

//Note: cds.LogChanges = true 
cds := TClientDataSet.Create(nil); 
cds.Data := MyClientDataSet.Delta; 
cds.First; 

while not cds.eof do 
begin 
    case cds.UpdateStatus of  
    usModified:  
     begin  
     ShowMessage('Modified');  
     cds.RevertRecord;  
     end; 
    usInserted: ShowMessage('Inserted'); 
    usDeleted: ShowMessage('Deleted');  
    end; 

    cds.Next;  
end;  

cds.Free; 

我在做什麼錯?

+0

您的CDS是否有LogChanges = False? –

+0

否.LogChanges爲True。 –

回答

0

的代碼你描述

ClientDataSet1.StatusFilter := [usDeleted]; 

是在你當前的ClientDataSet視圖只包括那些已經被刪除的記錄的正確方法。我不明白爲什麼它不適合你,因爲我始終在代碼中使用這種方法,並且從未失敗過。唯一我能想到的是,在設置StatusFilter屬性之前,您可能已經調用了ApplyUpdates或CancelUpdates,或者您可能已將LogChanges設置爲False(它的默認值爲True)。

順便說一句,取消狀態過濾器將其設置爲空集,這樣的:

ClientDataSet1.StatusFilter := []; 

,其中將包括插入,修改,並在您的視圖未經修改的記錄。已刪除的記錄不會顯示在當前視圖中。