delphi CloneCursor的强大及坑

龙枫
2023-12-01

CloneCursor不光可用于clientdataset,fdmemtable, 还可用于TFDDataSet。也就是TFdQuery也可以使用。

procedure CloneCursor(ASource: TFDDataSet; AReset: Boolean = False;  AKeepSettings: Boolean = False); virtual;

描述

共享属于另一个数据集的数据。

使用CloneCursor将属于另一个数据集的数据与此数据集共享。调用CloneCursor 后,该数据集和ASource数据集的内部数据存储在物理上是相同的。 

ASource 是对其数据将与此数据集共享的数据集的引用。 

AResetAKeepSettings确定如何设置以下属性和事件的值:

如果AResetAKeepSettings都是False,则上面列出的属性值都设置为与源数据集匹配。 

如果AResetTrue,上面列出的属性都设置为默认值。 

如果AResetFalse并且AKeepSettingsTrue,则上面列出的属性不会更改。在这种情况下,应用程序必须确保现有索引、过滤器等与克隆数据兼容。 

CloneCursor不会克隆:

  • Persistent fields.
  • Adapter / update object.
  • Event handlers, excluding OnFilterRecord.

具体FDQuery使用时可以 如下

//重要,否则克隆数据集中append及last报错.
  csk.FP.FetchOptions.Mode := fmManual;
  csk.QD.FetchOptions.Mode := fmManual;
//AKeepSetting = true很重要,不然子表会链接到原主表去,即修改了mastersource
  csk.FP.CloneCursor(sk.FP,False,true);
  csk.QD.CloneCursor(sk.QD,False, true);

 类似资料: