以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]计算速度,死机 (http://foxtable.net/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 -- 搞不定的话,就发文件上来,说明目的和任务,以及遇到的问题。 |