下面2个例子是帮助中的原例子,相对而言哪个更高效、执行速度更快,不占用系统资源?
还是统计不同产品的销售数量和金额,不过我们这次全部用一段代码完成。
将下面的代码复制到命令窗口执行即可:
'生成统计表
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("产品", GetType(String), 32)
dtb.AddDef("数量", GetType(Integer))
dtb.AddDef("金额", GetType(Double))
dtb.Build()
'填充数据
dim f As New Filler
f.SourceTable = DataTables("订单")
f.SourceCols = "产品"
f.DataTable = DataTables("统计")
f.DataCols = "产品"
f.Fill()
'统计
For Each dr As Datarow In DataTables("统计").DataRows
dr("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & dr("产品") & "'")
dr("金额") = DataTables("订单").Compute("Sum(金额)","[产品] = '" & dr("产品") & "'")
Next
MainTable= Tables("统计")
当然,上面的代码如果改用GroupTableBuilder来实现,要容易很多。
之所以提供这样的例子,是为了让你知道,其实你有更多的选择,这样面对一些复杂的统计要求,你也能应付自如。
示例五
前面的统计,都使用了Filler来向统计表填充分组数据,实际上有时手工编码填充分组数据也是一个不错的选择。
还是以统计不同产品的销售数量和金额为例,如果手工编码填充分组数据,代码为:
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("产品", Gettype(String), 32)
dtb.AddDef("数量", Gettype(Integer))
dtb.AddDef("金额", Gettype(Double))
dtb.Build()
For Each nm As String In DataTables("订单").GetUniqueValues("","产品")
Dim dr As DataRow = DataTables("统计").AddNew()
dr("产品") = nm
dr("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & dr("产品") & "'")
dr("金额") = DataTables("订单").Compute("Sum(金额)","[产品] = '" & dr("产品") & "'")
Next
MainTable= Tables("统计")
代码是不是比示例四简洁很多呢,但哪个更好呢?