Foxtable(狐表)用户栏目专家坐堂 → [求助]统计


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

主题:[求助]统计

帅哥哟,离线,有人找我吗?
紫色幽魂
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5382 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点色)Dim lsb As DataTable = DataTables(...  发帖心情 Post By:2017/3/10 21:36:00 [只看该作者]

请问下下面这段代码是什么意思,不能理解,麻烦解惑
Dim filter As String = "1=1"
If rq1 <> Nothing Then
    filter &= " and [首次检测_检测日期] >= #" & rq1 & "#"
End If
If rq2 <> Nothing Then
    filter &= " And [首次检测_检测日期] <= #" & rq2 & "#"
End If

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/10 22:09:00 [只看该作者]

拼接字符串,生成筛选条件。自己弹出filter内容,看效果

1=1是为了少用一点代码,少做一些判断,提高效率,多用代码的例子看:http://www.foxtable.com/webhelp/scr/1058.htm

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


加好友 发短信
等级:狐神 帖子:4627 积分:33767 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2017/3/10 22:09:00 [只看该作者]

试试这个方法
Dim jb1 As New SQLJoinTableBuilder("查询表1","表B")
jb1.AddExp("类别","'首次检测'")
Dim lms As String = "A|B|C|D"
For Each lm As String In lms.Split("|")
    jb1.AddExp(lm,"sum(首次检测人员_" & lm & ")")
Next

Dim jb2 As New SQLJoinTableBuilder("查询表1","表B")
jb2.AddExp("类别","'返修检测'")
For Each lm As String In lms.Split("|")
    Dim bds As String = "iif(sum(返修_" & lm & ") is null,0,sum(返修_" & lm & "))"
    bds += "+iif(sum(二次返修_" & lm & ") is null,0,sum(二次返修_" & lm & "))"
    jb2.AddExp(lm,bds)
Next

jb1.Union(jb2,True)
jb1.Build()

For Each lm As String In lms.Split("|")
    Tables("查询表1").Cols(lm).GrandTotal = True
Next
Tables("查询表1").GrandTotal = True
MainTable = Tables("查询表1")

[此贴子已经被作者于2017/3/10 22:16:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
紫色幽魂
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5382 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)拼接字符串,生成筛选条件。自己弹出...  发帖心情 Post By:2017/3/11 12:22:00 [只看该作者]

  麻烦帮我看看我想要移除合计为空的列和如果第二次返修那行都为空就移除该行,改了下后面就不知道怎么弄了,还有下面这些代码感觉有问题,麻烦帮我看看

Dim lsb As DataTable = DataTables("检测项目")
Dim ryz() As String = {"A","B","C","D"}
Dim dtb As New DataTableBuilder("统计表")
dtb.AddDef("检测性质", Gettype(String), 32)
For Each ry As String In ryz
    dtb.AddDef(ry, Gettype(String), 32)
Next
dtb.AddDef("总计", Gettype(Double))
dtb.Build()
Dim rq As Date
With RibbonTabs("自定义1")("无损日统计表")
    rq = .Items("rq").value
End With
Dim filter As String
If rq <> Nothing Then
    filter &= " [首次检测_检测时间] >= #" & rq & "#"
End If
Dim dr As DataRow = DataTables("统计表").AddNew()
Dim dr1 As DataRow = DataTables("统计表").AddNew()
Dim dr2 As DataRow = DataTables("统计表").AddNew()
Dim dr3 As DataRow = DataTables("统计表").AddNew()
For Each ry As String In ryz
    dr("检测性质") = "首次检测"
    dr(ry) = lsb.Compute("sum(检测人员_" & ry & ")", filter)
    dr1("检测性质") = "返修检测"
    dr1(ry) = lsb.Compute("sum(返修_" & ry & ")", filter)
    dr2("检测性质") = "二次返修检测"
    dr2(ry) = lsb.Compute("sum(二次返修_" & ry & ")", filter)
    dr3("检测性质") = "合计:"
    dr3(ry) = dr(ry) + dr1(ry) + dr2(ry)
    Dim i As Double
    Dim sum As Double
    sum = i + dr(ry)
    dr("总计") = sum

Next
MainTable = Tables("统计表")


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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/11 14:20:00 [只看该作者]

下面注释的代码自己改回来

 

Dim lsb As DataTable = DataTables("表B")
Dim ryz() As String = {"A","B","C","D"}
Dim dtb As New DataTableBuilder("统计表")
dtb.AddDef("检测性质", Gettype(String), 32)
For Each ry As String In ryz
    dtb.AddDef(ry, Gettype(Double), 32)
Next
dtb.AddDef("总计", Gettype(Double))
dtb.Build()
Dim rq As Date
'With RibbonTabs("自定义1")("无损日统计表")
'rq = .Items("rq").value
'End With
Dim filter As String
'If rq <> Nothing Then
filter &= " [首次检测_检测日期] >= #2/1/2017#"
'End If首次检测_检测日期
Dim dr As DataRow = DataTables("统计表").AddNew()
Dim dr1 As DataRow = DataTables("统计表").AddNew()
Dim dr2 As DataRow = DataTables("统计表").AddNew()
Dim dr3 As DataRow = DataTables("统计表").AddNew()
For Each ry As String In ryz
    dr("检测性质") = "首次检测"
    dr(ry) = lsb.Compute("sum(首次检测人员_" & ry & ")", filter)
    dr1("检测性质") = "返修检测"
    dr1(ry) = lsb.Compute("sum(返修_" & ry & ")", filter)
    dr2("检测性质") = "二次返修检测"
    dr2(ry) = lsb.Compute("sum(二次返修_" & ry & ")", filter)
    dr3("检测性质") = "合计:"
    dr3(ry) = dr(ry) + dr1(ry) + dr2(ry)
    Dim i As Double
    Dim sum As Double
    sum = i + dr(ry)
    dr("总计") = sum
Next
filter = "1=1"
For Each ry As String In ryz
    filter &= " and " & ry & " is null "
    If DataTables("统计表").Compute("Sum(" & ry & ")") = 0 Then DataTables("统计表").DataCols.Delete(ry)
Next


DataTables("统计表").DeleteFor(filter)

MainTable = Tables("统计表")


 回到顶部
帅哥哟,离线,有人找我吗?
紫色幽魂
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5382 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)下面注释的代码自己改回来?...  发帖心情 Post By:2017/3/11 15:06:00 [只看该作者]

好像是求和计算那个位置出现错误,

Dim i As Double
    Dim sum As Double
    sum = i + dr(ry)
    dr("总计") = sum

从字符串“”到类型“Double”的转换无效。
输入字符串的格式不正确。

 

屏蔽这段代码后提示:

无效的聚合函数 Sum()和类型 String 的用法。

[此贴子已经被作者于2017/3/11 15:10:49编辑过]

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/11 15:32:00 [只看该作者]

仔细看15楼代码了吗??

 

Dim lsb As DataTable = DataTables("表B")
Dim ryz() As String = {"A","B","C","D"}
Dim dtb As New DataTableBuilder("统计表")
dtb.AddDef("检测性质", Gettype(String), 32)
For Each ry As String In ryz
    dtb.AddDef(ry, Gettype(Double), 32)
Next
dtb.AddDef("总计", Gettype(Double))
dtb.Build()


 回到顶部
帅哥哟,离线,有人找我吗?
紫色幽魂
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5382 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)仔细看15楼代码了吗?? Di...  发帖心情 Post By:2017/3/11 16:51:00 [只看该作者]

最后删除行的代码错误,列为空已经被删除了,会提示不存在


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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/11 17:04:00 [只看该作者]

我测试没有问题,重新上传例子看看

 回到顶部
帅哥哟,离线,有人找我吗?
紫色幽魂
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:682 积分:5382 威望:0 精华:0 注册:2015/1/23 0:31:00
回复:(有点蓝)我测试没有问题,重新上传例子看看  发帖心情 Post By:2017/3/13 17:01:00 [只看该作者]

请问下,如果我用外部数据库连接,这个需要怎么改

 回到顶部
总数 27 上一页 1 2 3 下一页