以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  查询结果做交叉统计报错.  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=143006)

--  作者:fox-man
--  发布时间:2019/11/11 17:17:00
--  查询结果做交叉统计报错.
事由说明:最近更新FT版本,由原先2019.04.12版更新为2019.10.12.1后报错,2019.04.12版时正常,请问这是版本升级的造成的吗?怎么处理呢?
************************
FT代码:
\'\'以下代码执行正常
Dim q As new QueryBuilder
q.C
q.TableName = "tablea"
q.SelectString = "S e lect name,datepart(mm,date)month,sum(isnull (amount,0))amount  f  rom table1 group by name,datepart(mm,date)"
q.Build


\'\'以下统计是报错
Dim g As New CrossTableBuilder("tablea", DataTables("tablea"))
g.HGroups.AddDef("name")
g.VGroups.AddDef("month")
g.Totals.AddDef("amount")
g.HorizontalTotal = True
g.VerticalTotal = True
g.Build()
MainTable = Tables("tablea")

**********************
错误详情:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.10.12.1
错误所在事件:
详细错误信息:
Object reference not set to an instance of an object.


[此贴子已经被作者于2019/11/11 17:18:32编辑过]

--  作者:有点蓝
--  发布时间:2019/11/11 17:27:00
--  
可能名称重复了

Dim g As New CrossTableBuilder("tablea2", DataTables("tablea"))
g.HGroups.AddDef("name")
g.VGroups.AddDef("month")
g.Totals.AddDef("amount")
g.HorizontalTotal = True
g.VerticalTotal = True
g.Build()
MainTable = Tables("tablea2")

--  作者:fox-man
--  发布时间:2019/11/11 17:35:00
--  
以前版本是正常的,最近没做代码调整,只是版本更新后重新发布过之后就出现这个问题了.
--  作者:有点蓝
--  发布时间:2019/11/11 17:41:00
--  
改为不同的名称测试还有没有问题?
--  作者:fox-man
--  发布时间:2019/11/12 9:08:00
--  
现在改为不同的表名没有问题,但在不改表名的情况下怎么实现呢?
--  作者:有点蓝
--  发布时间:2019/11/12 9:18:00
--  
必须要改名啊,两个表不能有重复的名称
--  作者:fox-man
--  发布时间:2019/11/12 9:24:00
--  
以下是引用有点蓝在2019/11/12 9:18:00的发言:
必须要改名啊,两个表不能有重复的名称
这项目是以两年前发布的,那时候表名是一样的,并没有报错.最近突然发现报错了,不知道是什么原因造成的.


--  作者:有点蓝
--  发布时间:2019/11/12 9:51:00
--  
这个我没有办法理解。可能和表格释放内存的方式有关吧,旧版本有内存泄漏的bug,新版本改进了

但是如果像这种同名的,也就是之前生成的同名查询表会被覆盖掉,这种情况完全没有必要先生成一个查询表啊,直接使用sql生成统计表就行了:http://www.foxtable.com/webhelp/topics/2307.htm

dim sql as string = "S e lect name,datepart(mm,date)month,sum(isnull (amount,0))amount  f  rom table1 group by name,datepart(mm,date)"
Dim g As New CrossTableBuilder("tablea", sql,"数据源名称")
g.HGroups.AddDef("name")
g.VGroups.AddDef("month")
g.Totals.AddDef("amount")
g.HorizontalTotal = True
g.VerticalTotal = True
g.Build()
MainTable = Tables("tablea")

--  作者:fox-man
--  发布时间:2019/11/12 11:59:00
--  
以下是引用有点蓝在2019/11/12 9:51:00的发言:
这个我没有办法理解。可能和表格释放内存的方式有关吧,旧版本有内存泄漏的bug,新版本改进了

但是如果像这种同名的,也就是之前生成的同名查询表会被覆盖掉,这种情况完全没有必要先生成一个查询表啊,直接使用sql生成统计表就行了:http://www.foxtable.com/webhelp/topics/2307.htm

dim sql as string = "S e lect name,datepart(mm,date)month,sum(isnull (amount,0))amount  f  rom table1 group by name,datepart(mm,date)"
Dim g As New CrossTableBuilder("tablea", sql,"数据源名称")
g.HGroups.AddDef("name")
g.VGroups.AddDef("month")
g.Totals.AddDef("amount")
g.HorizontalTotal = True
g.VerticalTotal = True
g.Build()
MainTable = Tables("tablea")

谢谢!