То, что Кен Уайт говорит в своем ответе, на 100% правильно, но я думаю, что есть еще кое-что, на что стоит обратить внимание, особенно когда вы упоминаете XML.
В отличие от некоторых других потомков TDataSet, как TClientDataSet, так и более современные наборы данных FireDA C реализуют свойство UpdateStatus
набора данных, и это отражает то, что произошло с текущей записью в наборе данных - подробности см. в интерактивной справке. Это перечисление [1] , объявленное как
type
TUpdateStatus = (usUnmodified, usModified, usInserted, usDeleted);
Вы говорите, что хотите сравнить записи с тем, что у вас есть в файле XML, и удалить записи, которые не были обновлено «из DBGrid», что, как сказал Кен, само по себе не имеет смысла.
Однако есть другой способ добиться того, чего вы, кажется, хотите. Если вы можете загрузить данные, отображаемые в наборе данных, подавая сетку из файла XML. тогда вы знаете, что, пока вы не обновите набор данных, записи должны соответствовать XML. Итак, после обновления записей в вашем приложении, вместо того, чтобы сравнивать все записи в наборе данных с их эквивалентами XML, вы можете просто удалить (из набора данных) записи, UpdateStatus которых равен usUnmodified. Это тривиально сделать с помощью такого метода:
procedure TForm1.DeleteUnmodifiedRecords;
begin
ClientDataSet1.DisableControls;
try
ClientDataSet1.First;
while not ClientDataSet1.Eof do begin
if ClientDataSet1.UpdateStatus = usUnModified then
ClientDataSet1.Delete
else
ClientDataSet1.Next;
end;
finally
ClientDataSet1.EnableControls;
end;
end;
, и это, конечно же, удалит записи из DBGrid.
Конечно, это предполагает, что вы можете загрузить XML данные в TClientDataSet или FireDA C набор данных, либо напрямую, либо путем преобразования XML в форму, которую любой из них может загружать с помощью компонента TXmlTransform, но я не буду go вдаваться в подробности этого здесь.
[1]: Следует остерегаться того, что usModified не кажется точным логическим отрицанием usUnmodified. Это имеет несколько неожиданное последствие: если вы примените StatusFilter [usModified] к CDS, записи, которые были изменены, могут появиться дважды, один раз в исходной форме и один раз в измененной форме - см. Рис. 6.5 Кэри Дженсена "* 1031" * Подробнее: ClientDataSets », 1-е издание.