StatusFilter на ClientDataSet

У меня возникли некоторые трудности с использованием ClientDataSet.StatusFilter := [usDeleted],
Это ничего не делает. Я подключил свой ClientDataSet к провайдеру.
При применении StatusFilter DataSet не отображает удаленные записи.
Он просто показывает записи, как до применения 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;

Что я делаю неправильно?

1 ответ

Код, который вы описываете

ClientDataSet1.StatusFilter := [usDeleted];

является правильным способом включить в текущий просмотр ClientDataSet только те записи, которые были удалены. Я не понимаю, почему он не работает для вас, так как я использую этот подход в своем коде все время, и он никогда не подводил. Единственное, о чем я могу думать, это то, что вы, возможно, вызывали ApplyUpdates или CancelUpdates до установки свойства StatusFilter, или у вас может быть LogChanges, установленный в False (по умолчанию это True).

Кстати, чтобы отменить фильтр состояния, установите его в пустой набор, например так:

ClientDataSet1.StatusFilter := [];

Это будет включать вставленные, измененные и неизмененные записи в вашем представлении. Удаленные записи не будут отображаться в текущем представлении.

Другие вопросы по тегам