以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]计算速度,死机  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=56711)

--  作者:建筑人生
--  发布时间:2014/9/11 10:50:00
--  [求助]计算速度,死机

我执行下面的代码就死机是什么原因,是不是刷新问题,就像VBA一样要关闭刷新

 

Dim dr As DataRow=e.DataRow

 

Dim tmp As Single  \'单精度型 

Dim reg As new System.Text.RegularExpressions.Regex("\\[.*\\]")

 

\'tmp =eval(reg.replace(dr("计算公式_水平"),""),dr)+eval(reg.replace(dr("计算公式_垂直_开关"),""),dr)+eval(reg.replace(dr("计算公式_垂直_配电箱"),""),dr) \'计算相加初始数值

 

Select Case  e.DataCol.Name       

               

    Case "楼层_数量","构件_数量"

       

        If dr.IsNull("楼层_数量") OrElse dr.IsNull("构件_数量") Then

            dr("管道合计") = Nothing

           

            dr("定额_电线规格1合计") = Nothing

            dr("定额_电线规格2合计") = Nothing

           

            dr("清单_电线规格1合计") = Nothing

            dr("清单_电线规格2合计") = Nothing

           

        End If

MessageBox.Show(1)

 

       

    Case "规格型号"

       

        dr = DataTables("常用数据").Find("规格型号 = \'" & e.DataRow("规格型号") & "\'" )

        If dr IsNot Nothing \'如果找到, 则设置各列内容

            e.DataRow("规格型号")= dr("规格型号")

            e.DataRow("电线_根数1")= dr("电线_根数1")

            e.DataRow("电线_规格1")= dr("电线_规格1")

           

            e.DataRow("电线_根数2")= dr("电线_根数2")

            e.DataRow("电线_规格2")= dr("电线_规格2")

            e.DataRow("管道规格")= dr("管道规格")

        End If

MessageBox.Show(2)

 

       

    Case "电线_根数1","电线_规格1"

       

        If dr.IsNull("电线_规格1") OrElse dr.IsNull("电线_根数1") Then

           

            dr("定额_电线规格1合计") = Nothing

            dr("清单_电线规格1合计") = Nothing

           

        End If

       

    Case "电线_根数2","电线_规格2"

       

        If dr.IsNull("电线_规格2") OrElse dr.IsNull("电线_根数2") Then

           

            dr("定额_电线规格2合计") = Nothing

            dr("清单_电线规格2合计") = Nothing

           

        End If

       

       

        MessageBox.Show(3)

 

       

    Case "计算公式_水平","计算公式_垂直_开关","计算公式_垂直_配电箱"

       

       

        dr("计算公式_小计") =eval(reg.replace(dr("计算公式_水平"),""),dr)+eval(reg.replace(dr("计算公式_垂直_开关"),""),dr)+eval(reg.replace(dr("计算公式_垂直_配电箱"),""),dr) \'计算相加初始数值

MessageBox.Show(4)

 

       

        

       

    Case "特性"

       

        If dr("特性")="线" Or dr("特性")= "线槽"  Then

           

            dr("管道合计") = Nothing

            

        Else

            If dr("特性")="管" Then

               

                tmp =eval(reg.replace(dr("计算公式_水平"),""),dr)+eval(reg.replace(dr("计算公式_垂直_开关"),""),dr)+eval(reg.replace(dr("计算公式_垂直_配电箱"),""),dr)

               

                dr("管道合计") =tmp*dr("构件_数量")*dr("楼层_数量")

               

               

                dr("定额_电线规格1合计") = Nothing

                dr("定额_电线规格2合计") = Nothing

               

                dr("清单_电线规格1合计") = Nothing

                dr("清单_电线规格2合计") = Nothing

               

            End If

        End If

MessageBox.Show(5)

 

       

        \'计算结果程序

       

        tmp = dr("计算公式_小计") \'eval(reg.replace(dr("计算公式_水平"),""),dr)+eval(reg.replace(dr("计算公式_垂直_开关"),""),dr)+eval(reg.replace(dr("计算公式_垂直_配电箱"),""),dr)

       

        MessageBox.Show(6)

 

       

        dr("管道合计") =tmp*dr("构件_数量")*dr("楼层_数量")

       

        dr("定额_电线规格1合计") =(tmp+dr("电线预留长度"))*dr("电线_根数1")*dr("构件_数量")*dr("楼层_数量")

        dr("定额_电线规格2合计") =(tmp+dr("电线预留长度"))*dr("电线_根数2")*dr("构件_数量")*dr("楼层_数量")

       

       

        dr("清单_电线规格1合计") =tmp*dr("电线_根数1")*dr("构件_数量")*dr("楼层_数量")

        dr("清单_电线规格2合计") =tmp*dr("电线_根数2")*dr("构件_数量")*dr("楼层_数量")

        MessageBox.Show(7)

 

End Select

[此贴子已经被作者于2014-9-11 10:52:02编辑过]

--  作者:Bin
--  发布时间:2014/9/11 10:58:00
--  
你代码写在DataColChanged?  死循环了吧

在代码开头和结束,加入暂停事件代码 http://www.foxtable.com/help/topics/2218.htm

--  作者:狐狸爸爸
--  发布时间:2014/9/11 11:00:00
--  
搞不定的话,就发文件上来,说明目的和任务,以及遇到的问题。