Можно ли изменить данные в клиентском наборе данных без изменения текущей записи?

У меня есть TClientDataSet, в котором хранятся данные, поступающие от медицинского инструмента. Этот клиентский набор данных связан с сеткой для отображения данных в режиме реального времени. Моя проблема в том, что когда пользователь редактирует данные, а прибор отправляет новый пакет, данные, которые пользователь изменил, но еще не опубликовал, теряются, потому что я могу получить только TBookmark для текущей записи, добавить новую запись и затем goto сохраненная закладка (которая иногда не является правильной записью, видимо из-за новой записи). Я могу проверить набор данных State, Post, если это необходимо, а затем установить State после этого, я ищу способ обновить данные в клиентском наборе данных, не затрагивая его State. Это вообще возможно?


person iMan Biglari    schedule 01.10.2013    source источник
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
comment
В качестве примечания к моему собственному ответу также можно просто оставить этот клон открытым в объекте «DeviceLogger», а не создавать или освобождать все время. Является ли это лучшим решением или нет, зависит от вашего приложения. - person Matt Allwood; 01.10.2013
comment
Не забывайте, что если входящие данные обрабатываются фоновым потоком, вам понадобится объект синхронизации для сериализации операций записи базовых данных. - person afrazier; 01.10.2013