Foxtable(狐表)用户栏目专家坐堂 → 跨表计算问题


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

主题:跨表计算问题

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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
跨表计算问题  发帖心情 Post By:2020/4/30 13:40:00 [只看该作者]

表A
类别           时间一     时间二     时间三    时间四          超时分钟
类别1         08:30    10:05   11:00   12:20        =(dr("时间一") - dr(表B.类别(“类别1”).("时间一"))+(dr("时间二") - dr(表B.类别(“类别1”).("时间二"))+(dr("时间三") - dr(表B.类别(“类别1”).("时间三"))+(dr("时间四") - dr(表B.类别(“类别1”).("时间四"))
类别2        12:00    13:00    14:10   15:00
类别3        16:05    17:00    18:00   19:00


表B

类别            时间一     时间二     时间三    时间四

类别1         09:00    10:00   11:00   12:00
类别2        12:00    13:00    14:00   15:00
类别3        16:00    17:00    18:00   19:00




'计算超时:
Select Case e.DataCol.name
    Case "时间一","时间二","时间三","时间四"
        Dim dr As DataRow = e.DataRow  
   If dr.IsNull("时间一")   Then   

dr("超时分钟") = Nothing
        Else
            Dim tp As TimeSpan
            tp =(dr("时间一") - dr(表B.类别(“类别1”).("时间一"))+(dr("时间二") - dr(表B.类别(“类别1”).("时间二"))+(dr("时间三") - dr(表B.类别(“类别1”).("时间三"))+(dr("时间四") - dr(表B.类别(“类别1”).("时间四"))
            dr("超时分钟") = tp.TotalSeconds() '真正的时段型数据要转换为秒数,才能存入时段列
        End If
End Select



需求如下:

超时分钟=(dr("时间一") - dr(表B.类别(“类别1”).("时间一"))+(dr("时间二") - dr(表B.类别(“类别1”).("时间二"))+(dr("时间三") - dr(表B.类别(“类别1”).("时间三"))+(dr("时间四") - dr(表B.类别(“类别1”).("时间四"))

1.计算超时
1.1计算表A的超时,表A"类别,时间一“与表B"类别,时间一“进行计算,后面三个时也类似,计算结算给相加的总和
  如果 表A"类别,时间一“与表B"类别,时间一“进行计算结果,小于等于0,就不显示,不与后面个时间进行的值相加;
  如果  表A"类别,时间一“与表B"类别,时间一“进行计算结果,大于等于1,就显示,与后面个时间进行的值相加;


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


加好友 发短信
等级:超级版主 帖子:111691 积分:568585 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/30 14:23:00 [只看该作者]

        Else
dim dr2 as datarow  = datatables("表B").find("类别='" & dr("类别") & "'")
if dr2 isnot nothing
            Dim tp As double = (dr("时间一") -  dr2("时间一")).TotalSeconds() +(dr("时间二") -  dr2("时间二")).TotalSeconds() +(dr("时间三") -  dr2("时间三")).TotalSeconds() +(dr("时间四") -  dr2("时间四")).TotalSeconds() 
            dr("超时分钟") = tp '真正的时段型数据要转换为秒数,才能存入时段列
end if
        End If
End Select

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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2020/4/30 15:30:00 [只看该作者]

老师,还有一个问题,这个计算公式中:
Dim tp As double = (dr("时间一") -  dr2("时间一")).TotalSeconds() +(dr("时间二") -  dr2("时间二")).TotalSeconds() +(dr("时间三") -  dr2("时间三")).TotalSeconds() +(dr("时间四") -  dr2("时间四")).TotalSeconds() 
上面公式的组成部条件:

(dr("时间一") -  dr2("时间一")).TotalSeconds(),计算出来值,小于等0,显示为“0”或不显示,当大于等于5,显示其真实的值。

(dr("时间二") -  dr2("时间二")).TotalSeconds(),计算出来值,小于等0,显示为“0”或不显示,当大于等于5,显示其真实的值。

(dr("时间三") -  dr2("时间三")).TotalSeconds() ,计算出来值,小于等0,显示为“0”或不显示,当大于等于5,显示其真实的值。

(dr("时间四") -  dr2("时间四")).TotalSeconds() ,计算出来值,小于等0,显示为“0”或不显示,当大于等于5,显示其真实的值。

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


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

dim a as double
if (dr("时间一") -  dr2("时间一")).TotalSeconds() >=5 then 
a = a + (dr("时间一") -  dr2("时间一")).TotalSeconds()
end if

if (dr("时间二") -  dr2("时间二")).TotalSeconds() >=5 then 
a = a + (dr("时间二") -  dr2("时间二")).TotalSeconds()
end if

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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2020/5/8 14:16:00 [只看该作者]

老师,计算出值不对,如图
 If dr2 IsNot Nothing
                Dim a As Double
                If (dr("时间一") -  dr2("时间一")).TotalSeconds() >10 Then
                    a = a + (dr("时间一") -  dr2("时间一")).TotalSeconds()
                End If
                
                If (dr("时间二") -  dr2("时间二")).TotalSeconds() >10 Then
                    a = a + (dr("时间二") -  dr2("时间二")).TotalSeconds()
                End If
                
                If (dr("时间三") -  dr2("时间三")).TotalSeconds() >10 Then
                    a = a + (dr("时间三") -  dr2("时间三")).TotalSeconds()
                End If
                If (dr("时间四") -  dr2("时间四")).TotalSeconds() >10 Then
                    a = a + (dr("时间四") -  dr2("时间四")).TotalSeconds()
                End If
                
                                              
                Dim tp As Double = (dr("时间一") -  dr2("时间一")).TotalSeconds() +(dr("时间二") -  dr2("时间二")).TotalSeconds() +(dr("时间三") -  dr2("时间三")).TotalSeconds() +(dr("时间四") -  dr2("时间四")).TotalSeconds()
                dr("超时分钟") = tp'真正的时段型数据要转换为秒数,才能存入时段列
            End If




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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2020/5/8 14:20:00 [只看该作者]

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





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


加好友 发短信
等级:超级版主 帖子:111691 积分:568585 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/8 14:31:00 [只看该作者]

应该是数据不是有问题,上传实例测试一下

If dr2 IsNot Nothing
                Dim a As Double
                If (dr("时间一") -  dr2("时间一")).TotalSeconds() >10 Then
                    a = a + (dr("时间一") -  dr2("时间一")).TotalSeconds()
                End If
                
                If (dr("时间二") -  dr2("时间二")).TotalSeconds() >10 Then
                    a = a + (dr("时间二") -  dr2("时间二")).TotalSeconds()
                End If
                
                If (dr("时间三") -  dr2("时间三")).TotalSeconds() >10 Then
                    a = a + (dr("时间三") -  dr2("时间三")).TotalSeconds()
                End If
                If (dr("时间四") -  dr2("时间四")).TotalSeconds() >10 Then
                    a = a + (dr("时间四") -  dr2("时间四")).TotalSeconds()
                End If
                dr("超时分钟") = a
            End If

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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2020/5/8 15:04:00 [只看该作者]

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


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


加好友 发短信
等级:超级版主 帖子:111691 积分:568585 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/8 15:51:00 [只看该作者]

7楼代码我测试没有问题

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


加好友 发短信
等级:六尾狐 帖子:1307 积分:8905 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2020/5/8 16:26:00 [只看该作者]

而我测试,和上传实例的数据,如6楼的问题,数据是错

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