Как удалить запись из TClientDataSet не удаляя её из базы?

verter
Дата: 27.07.2019 00:17:40
Вызываем Open - открываем TDataSet, отображаем данные из базы в TDBGrid, связывая через источник данных TDataSource. Всё как обычно. Теперь нужно просто в гриде не показывать определённую запись. Вызывать метод TDataSet.Delete нельзя, т.к. он удаляет запись в базе, а этого не нужно. Наверное как то можно фильтровать TDataSet после инициализации действия по скрытию записи. Но можно ли как то в самом гриде удалить из него строчку?
LocksmithPC
Дата: 27.07.2019 09:02:00
verter, добавить в таблицу поле fShow и использовать TQuery с select * from table where fshow = 1
s62
Дата: 27.07.2019 12:55:00
verter,

у вас в заголовке вопроса написано TClientDataSet, а в самом вопросе - TDataset. Так какой у вас конкретно Dataset? Если ClientDataSet, то там ведь изменения посылаются провайдеру только при вызове метода ApplyUpdates.

Можно спрятать какие-то записи в любом Dataset'е при помощи фильтрации, см. свойство Filtered и событие OnFilterRecord.
vavan
Дата: 29.07.2019 11:07:58
verter, см. cds.LogChanges
verter
Дата: 29.07.2019 16:20:53
LocksmithPC
verter, добавить в таблицу поле fShow и использовать TQuery с select * from table where fshow = 1


Так не могу, датасет ReadOnly
vavan
Дата: 29.07.2019 16:30:20
verter, если нужно динамически то скрывать то показывать запись то создать internalcalc-поле, по к-му включать фильтр. если же разово то я ранее написал как можно удалить запись лишь из датасета не влияя на журнал изменений
verter
Дата: 30.07.2019 14:43:58
vavan
verter, если нужно динамически то скрывать то показывать запись то создать internalcalc-поле, по к-му включать фильтр. если же разово то я ранее написал как можно удалить запись лишь из датасета не влияя на журнал изменений

Понял. Спасибо, попробую так и сделать.
MirnyiAtom
Дата: 30.07.2019 14:59:41
А зачем это нужно? Чего получить хотите?
verter
Дата: 30.07.2019 16:50:45
Нет, с вычислимым полем тоже не получается, т.к. датасат ReadOnly, то и задать значение вычислимому полю тоже не даёт.
verter
Дата: 30.07.2019 16:56:17
MirnyiAtom
А зачем это нужно? Чего получить хотите?


Я отобразил в DBGrid записи из ReadOnly датасета, который TClientDataSet.
По определённому событию нужно скрывать ту или иную запись из грида.
Я понимаю, что это достигается фильтрованием датасета, но как запоминать то что вот эта запись была скрыта, а вот эта ещё нет.
Конечно, можно добавить скажем стринглист, в который добавлять ID скрытых записей и потом каждый раз по событию фильтровать датасет в соответствии со значениями ID, которые запомнили в стринглисте, но как то это всё муторно, ищу более правильный способ. Может у грида есть какая-нибудь возможность?