QDataSet – 从另一个数据集中合并内容到当前数据集

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。

 

分享到: