Foxtable(狐表)用户栏目专家坐堂 → [求助]时间计算崩溃


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

主题:[求助]时间计算崩溃

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/18 15:09:00 [显示全部帖子]

看看是不是这个原因:

http://www.foxtable.com/help/topics/1522.htm

 

搞不定,就设置好代码,将这个表传上来,我们帮你分析一下原因。


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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/18 17:20:00 [显示全部帖子]

小林说得对,最好直接判断列名:

 

Select Case e.DataCol.name
    Case "完成日期","领取状态"
        If  e.DataRow.IsNull("完成日期") Or e.DataRow("领取状态")="已领取"  Then
            e.DataRow("提示")=Nothing
        Else
            Dim d1 As Date = Date.today
            Dim d2 As Date = e.DataRow("完成日期")
            If d1>d2
                e.DataRow("提示") = -1 * (d1 - d2).Days
            Else
                Dim cnt As Integer = (d2-d1).TotalDays
                For i As Integer = 1 To cnt
                    Dim d3 As Date = d1.adddays(i)
                    If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6 Then '如果是星期天或者星期六
                        cnt = cnt - 1
                    End If
                Next
                e.DataRow("提示") = cnt
            End If
        End If
End Select

 

这样效率高一些,因为你这段代码是完成日期和领取状态发生变化后才执行的,不是任何一列发生变化都执行,不判断列名,就容易死循环,导致死机。

[此贴子已经被作者于2012-9-18 17:22:34编辑过]

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


加好友 发短信
等级:管理员 帖子:47449 积分:251065 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/18 17:21:00 [显示全部帖子]

还有:

 

Select Case e.DataCol.name
    Case "发表日期","实际完成日期"

        If e.DataRow.IsNull("发表日期") And  e.DataRow.IsNull("实际完成日期") Then
            e.DataRow("检测用时")=Nothing
        Else
            Dim d1 As Date = e.DataRow("发表日期")
            Dim d2 As Date = e.DataRow("实际完成日期")
            If d1>d2
                e.DataRow("检测用时") = 0
            Else
                Dim cnt As Integer = (d2-d1).TotalDays
                For i As Integer = 1 To cnt
                    Dim d3 As Date = d1.adddays(i)
                    If d3.DayOfWeek = 0 OrElse d3.DayOfWeek = 6 Then '如果是星期天或者星期六
                        cnt = cnt - 1
                    End If
                Next
                e.DataRow("检测用时") = cnt + 1
            End If
        End If
End Select


 回到顶部