以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQLCrossTableBuilder问题续  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=11125)

--  作者:唐尸三摆手
--  发布时间:2011/7/8 15:07:00
--  SQLCrossTableBuilder问题续
下面代码不会报错:
Dim b As New SQLCrossTableBuilder("统计表1","aec00000")
b. c
b.AddTable("aec00000","itemcode","aaa00000","code") \'添加统计表
\'b.AddTable("aaa00000","classcode","aam00000","classcode") \'添加统计表
b.HGroups.AddDef("classcode","分类码") \'添加水平分组
\'b.HGroups.AddDef("classname","分类名称") \'添加水平分组
b.VGroups.AddDef("requiredate",DateGroupEnum.none) \'添加垂直分组
b.Totals.AddDef("plannum") \'添加数量列用于统计
b.VerticalTotal=True
b.Build() \'生成统计表
MainTable= Tables("统计表1")
MessageBox.Show("数据分析完毕!","提示",MessageBoxButtons.ok, MessageBoxIcon.Question)
但是,第四行代码如果执行就会报错:见图片
所以问题出在第四行代码:
aaa00000和aam00000通过classcode关联,aam00000包括classcode和classname两列
生成的统计表水平分组为classcode和classname两列,垂直分组为aec00000的requiredate列
统计列为aec00000的plannum列
很早之前版本发布的程序运行正常,不知何故。

图片点击可在新窗口打开查看此主题相关图片如下:screenshot31.jpg
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2011/7/8 15:11:00
--  

看一下SQLCrossTableBuilder说明的最后一部分:同名列的处理:

http://help.foxtable.com/topics/1627.htm

 

[此贴子已经被作者于2011-7-8 15:11:35编辑过]

--  作者:唐尸三摆手
--  发布时间:2011/7/8 21:31:00
--  
sql server也可以用{表名}.列名的方法吗
[此贴子已经被作者于2011-7-8 21:31:14编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/9 8:03:00
--  
可以的
--  作者:唐尸三摆手
--  发布时间:2011/7/9 10:26:00
--  
Dim b As New SQLCrossTableBuilder("a","aec00000")
b.c
b.AddTable("aec00000","itemcode","aaa00000","code") \'添加统计表
b.AddTable("aec00000","id_contract","eba00000","id_contract") \'添加统计表
b.AddTable("aaa00000","classcode","aam00000","classcode") \'添加统计 表
b.HGroups.AddDef("{aaa00000}.classcode","分类码") \'添加水平分组
b.VGroups.AddDef("requiredate",DateGroupEnum.none) \'添加垂直分组
b.Totals.AddDef("plannum") \'添加数量列用于统计
b.VerticalTotal=True
b.Build(True) \'生成统计表
Tables("nb_table1").DataSource = b.BuildDataSource()


这段代码仍然报错,错误出在第五行,还是请老大看看,没有第五行就可以执行,有第五行就报错

--  作者:狐狸爸爸
--  发布时间:2011/7/9 10:29:00
--  

做个例子上来测试。


--  作者:唐尸三摆手
--  发布时间:2011/7/11 8:43:00
--  

经测试,应该是个BUG

 

操作步骤:

1.打开CaseStudy目录下的文件:多表统计.Table

2.命令窗口执行下面的代码(引用自帮助文件)

Dim b As New SQLCrossTableBuilder("统计表1","订单")

b. ConnectionName = "Sale"

b.AddTable("订单","产品ID","产品","产品ID")

b.HGroups.AddDef("{订单}.产品ID")

b.VGroups.Adddef("日期",DateGroupEnum.Year,"")

b.Totals.AddDef("数量")

b.Build

MainTable = Tables("统计表1")

执行结果完全正确。


图片点击可在新窗口打开查看此主题相关图片如下:screenshot35.jpg
图片点击可在新窗口打开查看

3.新增一个独立窗口F01,添加一个表控件table1。

4.现在将上面第二步正确代码的最后两行改为:

b.Build(True)
Forms("F01").Show()
Tables("F01_table1").DataSource = b.BuildDataSource

5.继续执行代码,发现报错


图片点击可在新窗口打开查看此主题相关图片如下:screenshot32.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:screenshot33.jpg
图片点击可在新窗口打开查看
6.使用sql server数据源测试,问题依然如此,由此判断,应该是个BUG

7.程序版本


图片点击可在新窗口打开查看此主题相关图片如下:screenshot31.jpg
图片点击可在新窗口打开查看

 

不过我说了不算的,还要老大你来看下

[此贴子已经被作者于2011-7-11 8:48:44编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/7/11 8:49:00
--  

正确代码:

 

Dim b As New SQLCrossTableBuilder("统计表1","订单")
b.C
b.AddTable("订单","产品ID","产品","产品ID")
b.HGroups.AddDef("{订单}.产品ID")
b.VGroups.Adddef("日期",DateGroupEnum.Year,"年")
b.Totals.AddDef("数量")
Forms("窗口1").Show()
Tables("窗口1_Table1").DataSource = b.BuildDataSource

 

也就是说:

b.Build(True)
是多余的。

 

 

 

 


--  作者:唐尸三摆手
--  发布时间:2011/7/11 9:01:00
--  
帮助好似没有提到图片点击可在新窗口打开查看这点
--  作者:狐狸爸爸
--  发布时间:2011/7/11 9:02:00
--  
呵呵,帮助也没有教你这样做啊,在帮助中,Build和BuildDataSource从来都是单独使用的。