#delphi #dataset #delphi-2006
#delphi #набор данных #delphi-2006
Вопрос:
У меня возникли некоторые трудности с использованием ClientDataSet.StatusFilter := [usDeleted]
.
Это ничего не делает. Я подключаю свой набор данных клиента к поставщику.
При применении StatusFilter в наборе данных не отображаются удаленные записи.
Он просто показывает записи, как и до применения StatusFilter.
С другой стороны. Если я использую ClientDataSet.CreateDataSet
, который не подключен к поставщику, и использую только ClientDataSet в качестве набора данных в памяти, тогда StatusFilter работает так, как описано в документации.
В наборе данных отображаются только удаленные записи.
ClientDataSet.UpdateStatus также показывает правильный статус usDeleted.
Единственный способ, которым я могу получить свой первый ClientDataSet, подключенный к поставщику для отображения удаленных записей, — это использовать ClientDataSet .Дельта-свойство. Но это не позволяет мне вернуть удаленную запись.
//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. Есть ли на ваших компакт-дисках LogChanges = False ?
Ответ №1:
Код, который вы описываете
ClientDataSet1.StatusFilter := [usDeleted];
это правильный способ включить в ваше текущее представление ClientDataSet только те записи, которые были удалены. Я не понимаю, почему это не работает для вас, поскольку я постоянно использую этот подход в своем коде, и он никогда не подводил. Единственное, о чем я могу думать, это то, что вы, возможно, вызвали ApplyUpdates или CancelUpdates перед установкой свойства StatusFilter, или у вас может быть LogChanges установлено значение False (по умолчанию оно равно True).
Кстати, чтобы отменить фильтр статуса, установите для него пустой набор, например:
ClientDataSet1.StatusFilter := [];
Это будет включать вставленные, измененные и неизмененные записи в вашем представлении. Удаленные записи не будут отображаться в текущем представлении.