Foxtable(狐表)用户栏目专家坐堂 → [求助]表中用代码写公式后导入数据卡死(运算慢原因)


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

主题:[求助]表中用代码写公式后导入数据卡死(运算慢原因)

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


加好友 发短信
等级:幼狐 帖子:83 积分:1381 威望:0 精华:0 注册:2013/11/28 19:45:00
[求助]表中用代码写公式后导入数据卡死(运算慢原因)  发帖心情 Post By:2015/9/24 11:57:00 [只看该作者]

表中datacolchanged事件代码如下,经测试重置或合并导入"钣金喷涂工艺数值","焊接点数","焊接段数"导致数值发生变化时会卡死,是何原因,有无好的办法?

Select Case e.DataCol.Name
    Case "钣金喷涂工艺数值","焊接点数","焊接段数","单件汇报次数"
               DataTables("零件工艺").DataCols("工序名称").RaiseDataColChanged()
End Select
Select Case e.DataCol.Name
    Case "工序名称"
        If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
            e.DataRow("计件工序") = Nothing '那么清空此行单价列的内容
            e.DataRow("工艺参数单位") = Nothing
            e.DataRow("加工单价") = Nothing
            e.DataRow("单件工作量") = Nothing
            e.DataRow("钣金喷涂工艺数值")= Nothing
            e.DataRow("焊接点数")= Nothing
            e.DataRow("焊接段数")= Nothing
        ElseIf e.DataRow("工序名称") = "焊接" Then
            e.DataRow("钣金喷涂工艺数值")= Nothing
            Dim dr As DataRow        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
            dr = DataTables("加工单价").Find("[工序名称] = '" & e.NewValue & "'")
            If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
                e.DataRow("计件工序") = dr("计件工序")
                e.DataRow("工艺参数单位")=dr("工艺参数单位")
                e.DataRow("加工单价") = dr("加工单价")
                If e.DataRow("工序名称") ="NC冲" Then
                    e.DataRow("单件工作量") =e.DataRow("工艺数值")/3600/e.DataRow("单件汇报次数")*e.DataRow("NC系数")
                ElseIf e.DataRow("工序名称") = "剪床" Then
                    e.DataRow("单件工作量") =1/e.DataRow("工艺数值")/e.DataRow("单件汇报次数")
                ElseIf e.DataRow("工序名称") = "辊压" Then
                    e.DataRow("单件工作量") =e.DataRow("工艺数值")/1000/e.DataRow("单件汇报次数")
                End If
            Else
                e.DataRow("单件工作量") =e.DataRow("工艺数值")/e.DataRow("单件汇报次数")
            End If
        ElseIf e.DataRow("工序名称") <> "焊接" Then
            e.DataRow("焊接点数")= Nothing
            e.DataRow("焊接段数")= Nothing
            Dim dr As DataRow        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
            dr = DataTables("加工单价").Find("[工序名称] = '" & e.NewValue & "'")
            If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
                e.DataRow("计件工序") = dr("计件工序")
                e.DataRow("工艺参数单位")=dr("工艺参数单位")
                e.DataRow("加工单价") = dr("加工单价")
                If e.DataRow("工序名称") ="NC冲" Then
                    e.DataRow("单件工作量") =e.DataRow("工艺数值")/3600/e.DataRow("单件汇报次数")*e.DataRow("NC系数")
                ElseIf e.DataRow("工序名称") = "剪床" Then
                    e.DataRow("单件工作量") =1/e.DataRow("工艺数值")/e.DataRow("单件汇报次数")
                ElseIf e.DataRow("工序名称") = "辊压" Then
                    e.DataRow("单件工作量") =e.DataRow("工艺数值")/1000/e.DataRow("单件汇报次数")
                Else
                    e.DataRow("单件工作量") =e.DataRow("工艺数值")/e.DataRow("单件汇报次数")
                End If
            End If
        End If
        e.DataRow("单件计件工资")=e.DataRow("单件工作量")*e.DataRow("加工单价")
    Case "图号"
        If e.NewValue Is Nothing Then
            e.DataRow("钣金喷涂工艺数值")= Nothing
            e.DataRow("焊接点数")= Nothing
            e.DataRow("焊接段数")= Nothing
            e.DataRow("NC系数")= Nothing
        Else
            Dim ab As DataRow        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
            ab = DataTables("零件表").Find("[图号] = '" & e.NewValue & "'")
            If ab IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
                e.DataRow("NC系数") = ab("NC系数")
            End If
        End If
End Select

 


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


加好友 发短信
等级:幼狐 帖子:83 积分:1381 威望:0 精华:0 注册:2013/11/28 19:45:00
  发帖心情 Post By:2015/9/24 11:59:00 [只看该作者]

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


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


加好友 发短信
等级:幼狐 帖子:83 积分:1381 威望:0 精华:0 注册:2013/11/28 19:45:00
  发帖心情 Post By:2015/9/24 12:02:00 [只看该作者]

主要问题是零件工艺表的那段代码问题。但代码符合使用要求,能正常计算,就是想合并导入一些新整理的资料时会卡死。工艺数值那几列复制粘贴几行数据时就能感到明显慢。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/24 12:04:00 [只看该作者]

把数据库发上来。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/24 12:05:00 [只看该作者]

看代码,是这句代码有问题,输入一列,就重新刷新全部的记录?肯定不对,至少加上条件。

 

Select Case e.DataCol.Name
    Case "钣金喷涂工艺数值","焊接点数","焊接段数","单件汇报次数"
               DataTables("零件工艺").DataCols("工序名称").RaiseDataColChanged()
End Select


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


加好友 发短信
等级:幼狐 帖子:83 积分:1381 威望:0 精华:0 注册:2013/11/28 19:45:00
  发帖心情 Post By:2015/9/24 16:49:00 [只看该作者]

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


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


加好友 发短信
等级:幼狐 帖子:83 积分:1381 威望:0 精华:0 注册:2013/11/28 19:45:00
  发帖心情 Post By:2015/9/24 16:51:00 [只看该作者]

虽然Select Case e.DataCol.Name
    Case "钣金喷涂工艺数值","焊接点数","焊接段数","单件汇报次数"
               DataTables("零件工艺").DataCols("工序名称").RaiseDataColChanged()
End Select

代码很频繁但重置的地工序名称列不会卡死,但重置钣金喷涂工艺数值就会卡死,现已经上传数据库,请帮助看一下,谢谢!


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/9/24 17:08:00 [只看该作者]

去看 零件工艺 表的 工序名称 列的datacolchanged事件,或者这样写

 

SystemReady = False

DataTables("零件工艺").DataCols("工序名称").RaiseDataColChanged("工序名称 = '" & e.DataRow("工序名称") & "'")

SystemReady = True


 回到顶部