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


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

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

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


加好友 发短信
等级:三尾狐 帖子:636 积分:5699 威望:0 精华:0 注册:2012/8/2 19:04:00
[求助]时间计算崩溃  发帖心情 Post By:2012/9/18 14:59:00 [只看该作者]

麻烦大家帮我看下,下面这段代码哪里出问题了,每次当这段代码运行的时候fotable就崩溃,系统自动关闭了~

 

 

 

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


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/9/18 15:09:00 [只看该作者]

看看是不是这个原因:

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

 

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


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


加好友 发短信
等级:三尾狐 帖子:636 积分:5699 威望:0 精华:0 注册:2012/8/2 19:04:00
  发帖心情 Post By:2012/9/18 15:46:00 [只看该作者]

以下是引用狐狸爸爸在2012-9-18 15:09:00的发言:

看看是不是这个原因:

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

 

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

 

在清理数据的时候也发现了一个问题,在委托信息的表上,剩下的这些信息在清楚的时候,foxtable也会崩溃直接关闭,委托信息表的提示列也是有计算的,这个在计算的时候也会崩溃,检测项目汇总里的检测用时在计算的时候也是会崩溃直接关闭,麻烦狐爸帮我看看这个粗略的表是怎么回事~~

这个是第一次用foxtable做数据管理,麻烦狐爸帮我看看还有没其他问题~~谢谢啦!!!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:业务管理系统.zip

[此贴子已经被作者于2012-9-18 15:46:21编辑过]

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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2012/9/18 16:00:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:三尾狐 帖子:636 积分:5699 威望:0 精华:0 注册:2012/8/2 19:04:00
  发帖心情 Post By:2012/9/18 16:01:00 [只看该作者]

qqq

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/18 17:01:00 [只看该作者]

 如狐爸所说的,死循环了。

 在datacolchanging事件中,修改了【操作记录】的值,导致触发【操作记录】的datacolchanged事件,然后进入楼主的那段代码,由于没有判断列名,而下面的代码里又有修改 列 的内容,导致重新进入datacolchanging事件。

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/9/18 17:04:00 [只看该作者]

 修改方法是,加一个列名判断。

 比如

if e.datacol.name <> "操作记录" then

end if       

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


加好友 发短信
等级:三尾狐 帖子:636 积分:5699 威望:0 精华:0 注册:2012/8/2 19:04:00
  发帖心情 Post By:2012/9/18 17:14:00 [只看该作者]

其实我不是很懂应该在哪里修改代码,麻烦你说下我改怎么改好吗?谢谢啦!

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望: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编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望: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


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