以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]表中用代码写公式后导入数据卡死(运算慢原因)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=75003)

--  作者:xiangwei_zeng
--  发布时间: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
--  发布时间:2015/9/24 11:59:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:计件核算平台.foxdb


--  作者:xiangwei_zeng
--  发布时间:2015/9/24 12:02:00
--  
主要问题是零件工艺表的那段代码问题。但代码符合使用要求,能正常计算,就是想合并导入一些新整理的资料时会卡死。工艺数值那几列复制粘贴几行数据时就能感到明显慢。
--  作者:大红袍
--  发布时间:2015/9/24 12:04:00
--  
把数据库发上来。
--  作者:大红袍
--  发布时间:2015/9/24 12:05:00
--  

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

 

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


--  作者:xiangwei_zeng
--  发布时间:2015/9/24 16:49:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:jijiancs.zip


--  作者:xiangwei_zeng
--  发布时间:2015/9/24 16:51:00
--  

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

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


--  作者:大红袍
--  发布时间:2015/9/24 17:08:00
--  

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

 

SystemReady = False

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

SystemReady = True