CloneCursor不光可用于clientdataset,fdmemtable, 还可用于TFDDataSet。也就是TFdQuery也可以使用。
procedure CloneCursor(ASource: TFDDataSet; AReset: Boolean = False; AKeepSettings: Boolean = False); virtual;
描述
共享属于另一个数据集的数据。
使用CloneCursor将属于另一个数据集的数据与此数据集共享。调用CloneCursor 后,该数据集和ASource
数据集的内部数据存储在物理上是相同的。
ASource
是对其数据将与此数据集共享的数据集的引用。
AReset
并AKeepSettings
确定如何设置以下属性和事件的值:
- Filter, Filtered, FilterOptions, OnFilterRecord, and FilterChanges.
- IndexName, IndexFieldNames.
- MasterSource and MasterFields.
- ReadOnly.
如果AReset
和AKeepSettings
都是False,则上面列出的属性值都设置为与源数据集匹配。
如果AReset
是True,上面列出的属性都设置为默认值。
如果AReset
是False并且AKeepSettings
是True,则上面列出的属性不会更改。在这种情况下,应用程序必须确保现有索引、过滤器等与克隆数据兼容。
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);