Foxtable(狐表)用户栏目专家坐堂 → [求助]统计表合并问题(已经解决)


  共有4380人关注过本帖树形打印复制链接

主题:[求助]统计表合并问题(已经解决)

帅哥哟,离线,有人找我吗?
cqlwsam
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
[求助]统计表合并问题(已经解决)  发帖心情 Post By:2013/12/25 15:52:00 [只看该作者]

如图,通过“统计”按钮将textbox2中的字符串按“vbcrlf”、“;”及“:”逐级拆分,得到若干字符串,组成形成sql语句,每一个"vbcrlf"形成一个sql语句进行统计。统计表的个数与“vbcrlf”拆分后形成的字符串个数相同。现在需要对统计表进行合并,用于图表绘制。统计表合并得不到想要的结果。不知道代码的问题出在哪儿?


图片点击可在新窗口打开查看此主题相关图片如下:360软件小助手截图20131225154246.jpg
图片点击可在新窗口打开查看


例子见:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=44164&page=2

“统计”的click的代码如下:


Dim d1,d2 As String
Dim kind,tongji As String
Dim sql As String
Dim str As String= e.Form.Controls("TextBox2").value
Dim n As Integer
Dim strs() As String
strs =str.replace(vbcr,"").Split(vblf)
n=strs.Length
Dim dts(n-1) As fxDataSource
For i As Integer = 0 To n-1
    If strs(i)>"" Then
        Dim s() As String=strs(i).Split(";")
        For j As Integer = 0 To s.Length-1
            If s(j)<>"" Then
                If s(j).Contains("统计项目") Then
                    Dim ss() As String=s(j).Split(";")
                    For Each s1 As String In ss
                        tongji=s1.split(":")(1)
                    Next
                End If
                If s(j).contains("开始时间") Then
                    Dim ss() As String=s(j).Split(";")
                    For Each s1 As String In ss
                        If s1.split(":")(1)="无" Then
                            d1=""
                        Else
                            d1=s1.split(":")(1)
                        End If
                    Next
                End If
                If s(j).contains("截止时间") Then
                    Dim ss() As String=s(j).Split(";")
                    For Each s1 As String In ss
                        If s1.split(":")(1)="无" Then
                            d2=""
                        Else
                            d2=s1.split(":")(1)
                        End If
                    Next
                End If
                If s(j).contains("患者种类") Then
                    Dim ss() As String=s(j).Split(";")
                    For Each s1 As String In ss
                        kind=s1.split(":")(1)
                    Next
                End If
            End If
        Next
        If d1="" Then
            If d2="" Then
                If kind="无" OrElse kind="预约患者(登记时间)" Then
                    sql="select * from {基本情况}"
                Else If kind="住院患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='已入院'"
                Else If kind="推迟入院(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='推迟入院'"
                Else If kind="失访患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='无法联系'"
                Else If kind="入院患者(入院日期)" Then
                    sql="select * from {基本情况} where 情况说明='已入院'"
                Else If kind="预约患者(入院日期)" Then
                    sql="select * from {基本情况} where (情况说明<>'推迟入院'or 情况说明<>'无法联系')"
                End If
            Else
                If kind="无" OrElse kind="预约患者(登记时间)" Then
                    sql="select * from {基本情况} where 登记日期<d2"
                Else If kind="住院患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='已入院' and 登记日期<#" & d2 & "#"
                Else If kind="推迟入院(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='推迟入院'and 登记日期<#" & d2 & "#"
                Else If kind="失访患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='无法联系'and 登记日期<#" & d2 & "#"
                Else If kind="入院患者(入院日期)" Then
                    sql="select * from {基本情况} where 情况说明='已入院'and 预约日期<#" & d2 & "#"
                Else If kind="预约患者(入院日期)" Then
                    sql="select * from {基本情况} where (情况说明<>'推迟入院'or 情况说明<>'无法联系') and 预约日期<#" & d2 & "#"
                End If
            End If
        Else
            If d2="" Then
                If kind="无" OrElse kind="预约患者(登记时间)" Then
                    sql="select * from {基本情况} where 登记日期>#" & d1 & "#"
                Else If kind="住院患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='已入院' And 登记日期>#" & d1 & "#"
                Else If kind="推迟入院(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='推迟入院'and 登记日期>#" & d1 & "#"
                Else If kind="失访患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='无法联系'and 登记日期>#" & d1 & "#"
                Else If kind="入院患者(入院日期)" Then
                    sql= "select * from {基本情况} where 情况说明='已入院'and 预约日期>#" & d1 & "#"
                Else If kind="预约患者(入院日期)" Then
                    sql="select * from {基本情况} where (情况说明<>'推迟入院'or 情况说明<>'无法联系') and 预约日期>#" & d1 & "#"
                End If
            Else
                If kind="无" OrElse kind="预约患者(登记时间)" Then
                    sql="select * from {基本情况} where 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#"
                Else If kind="住院患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='已入院' and 登记日期<#" & d2 & "# And 登记日期>#" & d1 & "#"
                Else If kind="推迟入院(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='推迟入院'and 登记日期<#" & d2 & "# And  登记日期>#" & d1 & "#"
                Else If kind="失访患者(登记时间)" Then
                    sql="select * from {基本情况} where 情况说明='无法联系'and 登记日期<#" & d2 & "# And  登记日期>#" & d1 & "#"
                Else If kind="入院患者(入院日期)" Then
                    sql= "select * from {基本情况} where 情况说明='已入院'and 预约日期<#" & d2 & "# And  预约日期>#" & d1 & "#"
                Else If kind="预约患者(入院日期)" Then
                    sql="select * from {基本情况} where (情况说明<>'推迟入院'or 情况说明<>'无法联系') and 预约日期<#" & d2 & "# And  预约日期>#" & d1 & "#"
                End If
            End If
        End If
        MessageBox.Show(d1,"提示")
        MessageBox.Show(d2,"提示")
        MessageBox.Show(kind,"提示")
        MessageBox.Show(sql,"提示")
        If t Then
            Dim g As New GroupTableBuilder("统计表",sql)
            g.Caption = "性别统计"
            g.Groups.AddDef("性别", "", "性别")
            g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数")
            dts(i) = g.BuildDataSource()
        End If
    End If
Next
For i As Integer =1 To n-1
   dts(0).Combine("性别",dts(i),"性别")
Next
forms("统计图形").Open
Tables("统计图形_Table1").DataSource = dts(0)
[此贴子已经被作者于2013-12-27 18:39:16编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
  发帖心情 Post By:2013/12/25 17:33:00 [只看该作者]

是我的代码的写法有问题,还是这种思路没办法实现?

 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
[求助]统计表合并问题  发帖心情 Post By:2013/12/25 17:35:00 [只看该作者]

还有一个办法,就是没确定一个条件就保存为excel文件,在excel里面去进行处理
[此贴子已经被作者于2013-12-25 17:35:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/12/25 20:35:00 [只看该作者]

 如下例子

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目.zip


 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
  发帖心情 Post By:2013/12/25 21:40:00 [只看该作者]

谢谢有点甜。但例子中并没有实现统计表的合并。
如:textbox2中的字符串为:

登记时间:是;入院时间:否;开始时间:2013/1/1;截止时间:2013/12/12;患者种类:预约患者(登记时间);统计项目:性别.

登记时间:是;入院时间:否;开始时间:2013/1/1;截止时间:2013/12/12;患者种类:失访患者(登记时间);统计项目:性别.

得到的结果应该:两组数据才对。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/12/25 22:16:00 [只看该作者]

 得到的是两组数据,但是在代码的最后,你不是按性别分组统计了么?

g.Groups.AddDef("性别", "", "性别")
g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数")

 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
  发帖心情 Post By:2013/12/25 22:32:00 [只看该作者]

可能是没有表达清楚。两组数据合并在一个表里。
代码中:

  If t Then
            Dim g As New GroupTableBuilder("统计表",sql)
            g.Caption = "性别统计"
            g.Groups.AddDef("性别", "", "性别")
            g.Totals.AddDef("姓名", AggregateEnum.Count,"","病例数")
            dts(i) = g.BuildDataSource()
        End If
    End If
Next
For i As Integer =1 To n-1
   dts(0).Combine("性别",dts(i),"性别")
Next
forms("统计图形").Open
Tables("统计图形_Table1").DataSource = dts(0)


按拆分结果进行循环,得到sql,分组统计,得到统计表,赋值给dts(i),然后通过combine链接,赋值给“统计图形_table1”。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/12/25 22:40:00 [只看该作者]

 嗯嗯,我明白你的意思了,小改了一下你的代码,如下,测试有效

 
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目.zip


 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
[求助]统计表合并问题  发帖心情 Post By:2013/12/25 23:15:00 [只看该作者]

可以得到两组数据,但是根据统计条件第二组数据应该与第一组不相同。你把下面的内容复制进textbox2中,就知道了。

登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 预约患者(登记时间);统计项目: 性别.

登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 失访患者(登记时间);统计项目: 性别.
[此贴子已经被作者于2013-12-25 23:16:37编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cqlwsam
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1014 积分:7529 威望:0 精华:0 注册:2010/4/12 12:23:00
  发帖心情 Post By:2013/12/26 18:23:00 [只看该作者]

可以得到两组数据,但是根据统计条件第二组数据应该与第一组不相同。你把下面的内容复制进textbox2中,就知道了。

登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 预约患者(登记时间);统计项目: 性别.

登记时间:是;入院时间:否;开始时间: 2013/1/1;截止时间: 2013/11/11;患者种类: 失访患者(登记时间);统计项目: 性别.
[

 回到顶部
总数 13 1 2 下一页