【问题标题】:Is it possible to modify data in a client dataset without changing current record?是否可以在不更改当前记录的情况下修改客户端数据集中的数据?
【发布时间】:2013-10-01 07:17:46
【问题描述】:

我有一个TClientDataSet,它存储来自医疗仪器的数据。此客户端数据集链接到网格以实时显示数据。我的问题是,当用户正在编辑数据时,仪器发送了一个新数据包,用户已经修改但尚未发布的数据丢失了,因为我只能在当前记录上获得TBookmark,追加新记录,然后goto 保存的书签(有时不是正确的记录,显然是由于新记录)。如有必要,我可以检查数据集的StatePost,然后设置State,我正在寻找一种在不影响其State 的情况下更新客户端数据集中数据的方法。这甚至可能吗?

【问题讨论】:

  • 您的 q 读取就像您的应用程序正在插入来自仪器的新数据一样。对吗?

标签: delphi delphi-xe2 tclientdataset


【解决方案1】:

克隆数据集并修改克隆上的数据。

Cary Jensen 的文档在这里: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 设置的文档并确定您实际需要什么(我不记得了)

【讨论】:

  • 作为我自己答案的注释,也可以只在“DeviceLogger”对象上保持这个克隆打开,而不是一直创建或释放。这是否是更好的解决方案取决于您的应用。
  • 不要忘记,如果传入数据正在由后台线程处理,您将需要一个同步对象来序列化对底层数据的写入。
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 2015-12-18
  • 2023-04-02
  • 1970-01-01
  • 2013-04-18
  • 2015-05-18
  • 1970-01-01
  • 2012-02-03
相关资源
最近更新 更多