У меня есть TClientDataSet
, в котором хранятся данные, поступающие от медицинского инструмента. Этот клиентский набор данных связан с сеткой для отображения данных в режиме реального времени. Моя проблема в том, что когда пользователь редактирует данные, а прибор отправляет новый пакет, данные, которые пользователь изменил, но еще не опубликовал, теряются, потому что я могу получить только TBookmark
для текущей записи, добавить новую запись и затем goto
сохраненная закладка (которая иногда не является правильной записью, видимо из-за новой записи). Я могу проверить набор данных State
, Post
, если это необходимо, а затем установить State
после этого, я ищу способ обновить данные в клиентском наборе данных, не затрагивая его State
. Это вообще возможно?
Можно ли изменить данные в клиентском наборе данных без изменения текущей записи?
comment
Ваш q читается так, как будто новые данные с прибора вставляются вашим приложением. Это правильно?
- person MartynA   schedule 01.10.2013
Ответы (1)
Клонируйте набор данных и измените данные в клоне.
Документ об этом Кэри Дженсена находится здесь: http://edn.embarcadero.com/article/29416 а>
В основном вам нужно что-то вроде
var
lEdDataset: TClientdataset;
begin
lEdDataset := TClientDataSet.create(nil);
try
lEdDataset.CloneCursor(SourceDataSet, True**);
StoreMedDeviceRecord(lEdDataset);
finally
lEdDataset.free;
end;
** Вам нужно будет прочитать документацию по настройкам True/False и решить, что вам действительно нужно (навскидку не помню)
person
Matt Allwood
schedule
01.10.2013
В качестве примечания к моему собственному ответу также можно просто оставить этот клон открытым в объекте «DeviceLogger», а не создавать или освобождать все время. Является ли это лучшим решением или нет, зависит от вашего приложения.
- person Matt Allwood; 01.10.2013
Не забывайте, что если входящие данные обрабатываются фоновым потоком, вам понадобится объект синхронизации для сериализации операций записи базовых данных.
- person afrazier; 01.10.2013