Foxtable(狐表)用户栏目专家坐堂 → [求助]时间计算,代码运行出错(已解决)


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

主题:[求助]时间计算,代码运行出错(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]时间计算,代码运行出错(已解决)  发帖心情 Post By:2014/9/25 19:07:00 [只看该作者]

效果:计算员工当天的累计工时(工时列为整数,累计工时列为时间日期)。
问题:运行到加背景色代码时,出现错误提示。请各位老师指教,谢谢!!



For Each dr As DataRow In DataTables("C").DataRows
    Dim N,N2,h,h2,m,m2,s,s2 As Integer
    Dim gs As Date
    Dim mr As DataRow = dr
    Dim drs As List(of DataRow)
    If dr.IsNull("累计工时") Then
        dr = DataTables("C").Find("[序号] < " & mr("序号") & " And [员工] = '" & mr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            N = mr("工时")
            h = N \ 3600
            m = (N Mod 3600) \ 60
            s = N Mod 60
            mr("累计工时") = Format(new Date(1,1,1,h,m,s), "HH:mm:ss")
            dr = mr
        End If
        drs = DataTables("C").Select("[序号] >= " & dr("序号") & " And [员工] = '" & dr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号]")
        For j As Integer = 1 To drs.Count - 1 '重算余下行的余额
            N2 = drs(j)("工时") '数据类型为整数,转换为日期时间类型
            h2 = N2 \ 3600
            m2 = (N2 Mod 3600) \ 60
            s2 = N2 Mod 60
            gs = Format(new Date(1,1,1,h2,m2,s2), "HH:mm:ss")
            Dim t As TimeSpan = drs(j-1)("累计工时") + gs
            drs(j)("累计工时") = (Format(t.Hours,"00") & ":" & Format(t.Minutes,"00") & ":" & Format(t.Seconds,"00"))
        Next
    End If
Next


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


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



[此贴子已经被作者于2014-9-25 22:10:10编辑过]

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


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

For Each dr As DataRow In DataTables("C").DataRows
    Dim N,N2,h,h2,m,m2,s,s2 As Integer
    Dim gs As Date
    Dim mr As DataRow = dr
    Dim drs As List(of DataRow)
    If dr.IsNull("累计工时") Then
        dr = DataTables("C").Find("[序号] < " & mr("序号") & " And [员工] = '" & mr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            N = mr("工时")
            mr("累计工时") = (new Date(1,1,1,0,0,0)).addSeconds(N)
            dr = mr
        End If
        drs = DataTables("C").Select("[序号] >= " & dr("序号") & " And [员工] = '" & dr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号]")
        For j As Integer = 1 To drs.Count - 1 '重算余下行的余额
            drs(j)("累计工时")= Cdate(drs(j-1)("累计工时")).AddSeconds(drs(j)("工时"))
        Next
    End If
Next

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/25 20:09:00 [只看该作者]

谢谢甜老师,问题解决,代码又简化了许多,又学了一招,真的太感谢甜老师了。

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/25 21:19:00 [只看该作者]

又碰到新问题,在原来的基础上,增加累计用时列,计算员工当天的累计用时(用时和累计用时列均为日期时间列)。
是加背景色的代码出错,还请各位老师指教,谢谢!!

代码如下:

For Each dr As DataRow In DataTables("C").DataRows
    Dim mr As DataRow = dr
    Dim drs As List(of DataRow)
    If dr.IsNull("累计用时") Then
        dr = DataTables("C").Find("[序号] < " & mr("序号") & " And [员工] = '" & mr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号] Desc") '找出上一行
        If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
            mr("累计用时") = mr("用时")
            dr = mr
        End If
        drs = DataTables("C").Select("[序号] >= " & dr("序号") & " And [员工] = '" & dr("员工") & "'And [日期] = '" & mr("日期") & "'", "[序号]")
        For j As Integer = 1 To drs.Count - 1 '重算余下行的余额
            Dim t As TimeSpan = CDate(drs(j-1)("累计用时")) + CDate(drs(j)("用时"))
            drs(j)("累计用时") = (Format(t.Hours,"00") & ":" & Format(t.Minutes,"00") & ":" & Format(t.Seconds,"00"))
        Next
    End If
Next


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


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


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

Dim d As Date = CDate(drs(j)("用时"))
drs(j)("累计用时") = CDate(drs(j-1)("累计用时")).AddSeconds(d.Hour*3600+d.Minute*60+d.Second)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/9/25 22:09:00 [只看该作者]

谢谢甜老师,问题解决,再次感谢!!

 回到顶部