Foxtable(狐表)用户栏目专家坐堂 → [求助]请狐表高手帮助,如何才能使代码更优?


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

主题:[求助]请狐表高手帮助,如何才能使代码更优?

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6800 威望:0 精华:1 注册:2012/8/7 22:03:00
  发帖心情 Post By:2012/12/15 11:23:00 [只看该作者]

你的年龄列是字符列


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


加好友 发短信
等级:幼狐 帖子:148 积分:1036 威望:0 精华:0 注册:2012/11/26 13:05:00
  发帖心情 Post By:2012/12/15 11:24:00 [只看该作者]

Dim dtb As New DataTableBuilder("年龄分布")
dtb.AddDef("疾病名称", Gettype(String), 16)
dtb.AddDef("总数", Gettype(Integer))
dtb.AddDef("一月", Gettype(Integer),"","1月")
dtb.AddDef("二月", Gettype(Integer),"","2月")
dtb.AddDef("三月", Gettype(Integer),"","3月")
dtb.AddDef("四月", Gettype(Integer),"","4月")
dtb.AddDef("五月", Gettype(Integer),"","5月")
dtb.AddDef("六月", Gettype(Integer),"","6月")
dtb.AddDef("七月", Gettype(Integer),"","7月")
dtb.AddDef("八月", Gettype(Integer),"","8月")
dtb.AddDef("九月", Gettype(Integer),"","9月")
dtb.AddDef("十月", Gettype(Integer),"","10月")
dtb.AddDef("十一月", Gettype(Integer),"","11月")
dtb.AddDef("十二月", Gettype(Integer),"","12月")
dtb.Build()
For Each nm As String In DataTables("疾病名称").GetUniqueValues("","疾病名称")
    Dim dr As DataRow = DataTables("年龄分布").AddNew()
    dr("疾病名称") = nm
    dr("一月") = DataTables("传染病查询一览表").Compute("COUNT(疾病名称)","[疾病名称] = '" & nm & "' And [年龄]>=0 And [年龄] <=5 And ([发病日期] >= #01/01/2012# And [发病日期] <= #02/01/2012#)")
Next 

 

这段代码能统计,但是出来的结果就是0,(实际数据中有一条5岁儿童的记录),为什么统计不出来,请大神指点。

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6800 威望:0 精华:1 注册:2012/8/7 22:03:00
  发帖心情 Post By:2012/12/15 11:24:00 [只看该作者]

Dim dtb As New DataTableBuilder("年龄分布")
dtb.AddDef("年龄段", Gettype(String), 16)
dtb.AddDef("总数", Gettype(Integer))
dtb.AddDef("一月", Gettype(Integer),"","1月")
dtb.AddDef("二月", Gettype(Integer),"","2月")
dtb.AddDef("三月", Gettype(Integer),"","3月")
dtb.AddDef("四月", Gettype(Integer),"","4月")
dtb.AddDef("五月", Gettype(Integer),"","5月")
dtb.AddDef("六月", Gettype(Integer),"","6月")
dtb.AddDef("七月", Gettype(Integer),"","7月")
dtb.AddDef("八月", Gettype(Integer),"","8月")
dtb.AddDef("九月", Gettype(Integer),"","9月")
dtb.AddDef("十月", Gettype(Integer),"","10月")
dtb.AddDef("十一月", Gettype(Integer),"","11月")
dtb.AddDef("十二月", Gettype(Integer),"","12月")
dtb.Build()
For i As Integer = 0 To 80 Step 5
    Dim dr As DataRow = DataTables("年龄分布").AddNew()
    dr("年龄段") = i & "-" & i + 5
    dr("一月") = DataTables("传染病查询一览表").Compute("COUNT(年龄)","([年龄] >= " & i & " And [年龄] < " & i+5 & ") And ([发病日期] >= #01/01/2012# And [发病日期] <= #02/01/2012#)")
Next

 

把年龄列全部改成整数列

[此贴子已经被作者于2012-12-15 11:25:13编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/15 11:25:00 [只看该作者]

 自己完善一下吧。

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



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


加好友 发短信
等级:幼狐 帖子:148 积分:1036 威望:0 精华:0 注册:2012/11/26 13:05:00
  发帖心情 Post By:2012/12/15 11:34:00 [只看该作者]

找到出错原因了,一个很低级的错误:[年龄]>='0' And [年龄] <='5'。

就是这样低级的错误,麻烦了大家一上午,非常抱歉,感谢各位大侠的帮助、指导。 


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


加好友 发短信
等级:幼狐 帖子:148 积分:1036 威望:0 精华:0 注册:2012/11/26 13:05:00
  发帖心情 Post By:2012/12/15 12:12:00 [只看该作者]

林老师,您的代码:

For i As Integer = 2 To 17
    For j As Integer = 1 To 12
        Dim ary() As String = Sheet1(i,0).Text.Split("-")
        Sheet1(i, j).Value = dt.Compute("count(编号)", "[疾病名称]='" & Jb_cmb & "' And 年龄 >= '" & ary(0) & "' And 年龄 <= '" & ary(1) & "' And [发病日期]>=#" & new Date(rq_m1.Year, j, 1) & "# And [发病日期]<=#" & new Date(rq_m1.Year, j, Date.DaysInMonth(rq_m1.Year,j)) & "#")
    Next
Next
很实用,但是统计出的结果不正确,不知道什么原因,请您给查一下,好吗?

疾病名称的条件好像失效了,统计出了全部的疾病,而且年龄条件有一部分也失效了(5月份23岁(21-25岁组)的麻疹,给统计到5月份0-5岁组去了。

[此贴子已经被作者于2012-12-15 12:14:46编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/15 12:42:00 [只看该作者]

 呃,是年龄的字段问题,把年龄列调整成数值类型,字符比较的话,不同于数字的比较,然后条件这样写。

Sheet1(i, j).Value = dt.Compute("count(编号)", "[疾病名称]='" & Jb_cmb & "' And 年龄 >= " & ary(0) & " And 年龄 <= " & ary(1) & " And [发病日期]>=#" & new Date(rq_m1.Year, j, 1) & "# And [发病日期]<=#" & new Date(rq_m1.Year, j, Date.DaysInMonth(rq_m1.Year,j)) & "#")
[此贴子已经被作者于2012-12-15 12:42:37编辑过]

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


加好友 发短信
等级:幼狐 帖子:148 积分:1036 威望:0 精华:0 注册:2012/11/26 13:05:00
  发帖心情 Post By:2012/12/15 13:09:00 [只看该作者]

又出新状况:索引超出了数组界限

Dim Sheet1 As XLS.Sheet = Book.Sheets("年龄分布")
Sheet1(0,1).value ="***街道" & rq_m1.year & "年" & jb_cmb & "三间分布(年龄)"
For i As Integer = 2 To 17
    For j As Integer = 1 To 12
        Dim ary() As String = Sheet1(i,1).Text.Split("-")
                 Sheet1(i, j+1).Value = dt.Compute("count(疾病名称)", "[疾病名称]='" & Jb_cmb & "' And 年龄 >= " & ary(0) & " And 年龄 <= " & ary(1) & " And [发病日期]>=#" & new Date(rq_m1.Year, j, 1) & "# And [发病日期]<=#" & new Date(rq_m1.Year, j, Date.DaysInMonth(rq_m1.Year,j)) & "#")
        Next
Next


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/12/15 14:04:00 [只看该作者]

注意字符的全角和半角。

Sheet1(i,1).Text.Split("")

保持与excel的一直

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


加好友 发短信
等级:幼狐 帖子:148 积分:1036 威望:0 精华:0 注册:2012/11/26 13:05:00
  发帖心情 Post By:2012/12/15 15:08:00 [只看该作者]

还是错误!
图片点击可在新窗口打开查看此主题相关图片如下:snap3.png
图片点击可在新窗口打开查看

 回到顶部
总数 42 上一页 1 2 3 4 5 下一页