同名列的处理
SQLGroupTableBuilder和SQLCrossTableBuilder可以统计多个表的数据,如果某一列同时存在于参与统计的多个表中,那么可能会产生冲突。
首先请打开CaseStudy目录下的文件:多表统计.Table。
然后在命令窗口执行下面的代码:
Dim
b As
New
SQLGroupTableBuilder("统计表1","订单")
b.ConnectionName
= "Sale"
b.AddTable("订单","产品ID","产品","产品ID")
'添加统计表
b.Groups.AddDef("产品ID")
'根据产品ID分组
b.Totals.AddDef("数量")
'对数量进行统计
b.Build
'生成统计表
MainTable
= Tables("统计表1")
'打开生成的统计表
你会发现Foxtable会报错,出问题的是这行代码:
b.Groups.AddDef("产品ID")
'根据产品ID分组
因为订单表和产品表,都有产品ID列,Foxtable无法判断应该用哪个表的产品ID列,所以报错。
对于这种多个表都存在的列,我们应该明确指定此列来自于哪个表,下面是正确的代码:
Dim
b As New SQLGroupTableBuilder("统计表1","订单")注意这行代码中,表名必须用大括号括起来:
b.Groups.AddDef("{订单}.产品ID") '根据订单表产品ID分组
再例如,假定产品表和订单表都有单价列,那么统计金额的时候,就必须明确指定单价列的来源表:
b.Totals.AddExp("金额","数量 * {订单}.单价")
同样在设置统计条件的时候,遇上同名列,也必须指定来源表,例如:
b.Filter = "{订单}.客户ID = 'C01'"
以上代码基于SQLGroupTableBuilder演示,SQLCrossTableBuilder存在同样的问题,处理方法也完全一样。