QDataSet 提供了一个 Merge 函数用于将一个数据集中的数据合并到已有的数据集中。利用它,可以实现渐进式刷新数据的效果:
首先,我们可以取一部分数据显示给用户,然后在用户需要时,再取一部分数据,然后合并到前面的结果集中显示给用户,这样子就可以实现数据的增量合并。
我们来看下函数声明:
function Merge(const ACmdText: QStringW; AType: TQDataMergeMethod;AWaitDone: Boolean): Boolean; overload; procedure Merge(ASource: TQDataSet; AType: TQDataMergeMethod;ACheckDeleted: Boolean = False); overload; procedure Union(ASource: TQDataSet; AUnionAll: Boolean = False); overload;
这里提供了三个函数:
第一个 Merge 函数用于执行一个脚本来获取要合并的数据,然后将数据合并到当前结果集中。AWaitDone 参数如果为 True,则会等待脚本执行成功,返回结果集后执行合并操作,如果为 False,则会尝试异步执行脚本并返回结果集。在异步执行成功并返回结果集后,再执行合并操作。
第二个 Merge 函数用于直接从 ASource 这个数据集中合并数据。
第三个 Union 函数实际上调用的是第二个 Merge 函数,如果 AUnionAll 为 True,则等价于 Merge(ASource,dmmAppend,False),否则,等价于 Merge(ASource,dmmMerge,False)。
我们重点来说第二个函数的参数:
- ASource : 要合并到当前数据集中的源数据集,它的各个字段和类型应合当前结果集保持一致。
- AType : 合并方式,有三种:
- dmmAppend : 追加模式,直接将 ASource 的数据无条件的追加到当前结果集中
- dmmReplace : 替换模式,清空当前的结果集中已有的内容,然后将 ASource 的内容追加进当前结果集
- dmmMerge : 合并模式,忽略掉 ASource 中在当前结果集中已存在的记录
- ACheckDeleted : 在 dmmMerge 模式时是否检查当前结果集中已经删除的记录,一般我们取 False。