以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多表交叉统计 动态添加项  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96100)

--  作者:jyh7081
--  发布时间:2017/2/13 11:55:00
--  [求助]多表交叉统计 动态添加项
设计了一个“SQLCrossTableBuilder”多表交叉统计的窗口,部分代码不会写,请大师在有空的时候帮助看看:

1、“添加分析表”复选框来自所有数据表 的表名列表;
     “垂直分组列”、“水平分组列”、“数据分析列”来自“表列管理” 表中的[列名];
     “统计条件”来自文本框右侧的筛选按钮;
2、不会写“记住条件”的代码;
3、“统计”按钮的代码只写了固定统计代码,不会写动态添加表或列字段代码;

请大师指教!谢谢!


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

附件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多表统计-例子.table


--  作者:有点色
--  发布时间:2017/2/13 12:16:00
--  

 没看懂你想要做什么。你固定代码执行都有错啊。

 

 根据你的代码这样改

 

Dim b As New SQLCrossTableBuilder("统计表1","分析数据")
For Each s As String In c5.text.Split("|")
    b.AddTable("分析数据","公历年月日",s,"时间") \'添加统计表
Next

For Each s As String In c6.text.Split("|")
    b.HGroups.AddDef(s) \'添加列用于垂直分组
Next

For Each s As String In c7.text.Split("|")
    b.VGroups.AddDef(s) \'添加列用于水平分组
Next
For Each s As String In c8.text.Split("|")
    b.Totals.AddDef(s) \'添加列用于统计
Next

If e.Form.Controls("CheckBox1").Select = True Then   \'水平方向生成汇总
    b.HorizontalTotal = True
End If

If e.Form.Controls("CheckBox2").Select = True Then   \'垂直方向生成汇总
    b.VerticalTotal = True
End If

If e.Form.Controls("CheckBox3").Select = True Then   \'自动生成汇总模式
    b.Subtotal = True
End If

\'If e.Form.Controls("CheckBox4").Select = True Then
    \'\'记住所有
    \'Dim ndr As DataRow = DataTables("表名").addnew
    \'ndr("名称") = "默认"
    \'ndr("表") = c5.text
    \'ndr("水平分组") = c6.text
    \'ndr("垂直分组") = c7.Text
\'End If

b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表
\'Tables("统计_Table1").DataSource= b.BuildDataSource   \'统计表放入指定窗口表


--  作者:jyh7081
--  发布时间:2017/2/13 13:24:00
--  
谢谢老师!我按照你写的代码重新修改了一下,但是运行提示“jion错误”。另外我新建了一个“操作日志”的表,但“记住条件”的代码没起作用。请老师抽空再给看看。


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

附件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多表统计-例子.table


--  作者:有点色
--  发布时间:2017/2/13 14:18:00
--  
 是不是一开始你用交叉统计就是错的?你要做什么?固定的统计你怎么写?
--  作者:jyh7081
--  发布时间:2017/2/13 16:27:00
--  
放入命令窗口执行没错呀:

Dim b As New SQLCrossTableBuilder("统计表1","分析数据") 

b.AddTable("分析数据","公历年月日","数据之上海1","时间") \'添加统计表
b.AddTable("分析数据","公历年月日","数据之上海2","时间") \'添加统计表
b.AddTable("分析数据","公历年月日","数据之上海3","时间") \'添加统计表
b.AddTable("分析数据","公历年月日","数据之上海4","时间") \'添加统计表
b.AddTable("分析数据","公历年月日","数据之上海5","时间") \'添加统计表

b.HGroups.AddDef("农历年份") \'添加列用于垂直分组
b.HGroups.AddDef("阳历月份") \'添加列用于垂直分组
\'
b.VGroups.AddDef("农历月") \'添加列用于水平分组

b.Totals.AddDef("SH000001上证指数") \'添加列用于统计

\'b.Filter = Forms("筛选窗口").Controls("TextBox1").Text 
b.Subtotal = True \'生成汇总模式

b.Build \'生成统计表
MainTable = Tables("统计表1") \'打开生成的统计表
\'Tables("统计_Table1").DataSource= b.BuildDataSource   \'统计表放入指定窗口表

--  作者:有点色
--  发布时间:2017/2/13 16:36:00
--  
代码没有问题。添加分析表,不能勾选【分析数据】等表。
--  作者:有点色
--  发布时间:2017/2/13 16:38:00
--  

记住条件那里,改成

 

If e.Form.Controls("CheckBox4").checked = True Then
    \'记住所有
    Dim ndr As DataRow = DataTables("操作日志").addnew
    ndr("名称") = "默认"
    ndr("表") = e.Form.Controls("CheckedComboBox5").text
    ndr("水平分组") = e.Form.Controls("CheckedComboBox6").text
    ndr("垂直分组") = e.Form.Controls("CheckedComboBox7").Text
End If