以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]时间计算,代码运行出错(已解决) (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=57510) |
-- 作者:yyzlxc -- 发布时间: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 [此贴子已经被作者于2014-9-25 22:10:10编辑过]
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2014/9/25 20:09:00 -- 谢谢甜老师,问题解决,代码又简化了许多,又学了一招,真的太感谢甜老师了。 |
-- 作者:yyzlxc -- 发布时间: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 |
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2014/9/25 22:09:00 -- 谢谢甜老师,问题解决,再次感谢!! |