QDataSet 提供了两个函数来比较两个数据集的差异,并将结果保存到第三个数据集。
procedure Intersect(ASource1, ASource2: TQDataSet; AFields: QStringW); procedure Diff(ASource1, ASource2: TQDataSet; AFields: QStringW;AIncSource1,AIncSource2:Boolean);
两个函数,其中 Intersect 函数用于取两个数据集中的交集部分,而 Diff 函数用于取两个数据集中不一样的部分。这两个函数的 AFields 用于记录要比较的字段列表,多个字段之间以 “,” 或 “;” 分隔,如果两个数据集中要比较的字段的名称不一致,则使用:
ASource1中的字段名=ASource2中的字段名
这种方式来建立两者之间的映射关系,如果两个字段名不一致,则会取第一个结果集中的字段名为最终结果集的字段名。
在使用这两个函数时,还要注意一点:这两个要比较数据集中对应的字段的类型要保持一致,否则比较无意义,程序会抛出异常。
Intersect 用于计算两个数据集中共同的记录,而 Diff 用于计算两个结果集中不同的记录,但额外提供了两个参数:
- AIncSource1 为 True 时,将 ASource1 中有,而 ASource2 中无的记录加到结果中
- AIncSource2 为 True 时,将 ASoruce2 中有,而 ASource1 中无的记录加到结果中
至于它们的调用方法,So easy!
procedure TForm1.Button1Click(Sender: TObject); begin FDest.Diff(FSource1,FSource2,Edit1.Text,CheckBox1.Checked,CheckBox2.Checked); end; procedure TForm1.Button2Click(Sender: TObject); begin FDest.Intersect(FSource1,FSource2,Edit1.Text); end;