以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  代码运行未响应问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=177184)

--  作者:wangglby
--  发布时间:2022/5/12 8:44:00
--  代码运行未响应问题

  请教下 ,以下按钮代码,执行时,老是未响应,等好久才能执行完,我把他们按顺序分成几段放到多个按钮里面,按先后顺序按这些按钮,则正常,请问是怎么回事。

 

[此贴子已经被作者于2022/5/12 11:59:31编辑过]

--  作者:有点蓝
--  发布时间:2022/5/12 9:26:00
--  
自己计算一下各段代码执行的时间:http://www.foxtable.com/webhelp/topics/2226.htm,看哪一段代码慢

把【常见效率问题】这章内容都看看
[此贴子已经被作者于2022/5/12 9:26:23编辑过]

--  作者:shenfengxiaozi
--  发布时间:2022/5/12 11:57:00
--  

  

         

[此贴子已经被作者于2022/5/12 11:58:37编辑过]

--  作者:wangglby
--  发布时间:2022/5/12 11:59:00
--  
  请问下 以下代码 从表B复制内容到表BBB,表B只有5行数据

 

代码1运行0.几秒,代码2运行2秒, 2段代码一起运行 时间7秒多, 有时还会出现未响应,请问是怎么回事

 

 

    

代码 1:

  Dim dt11 As New Date(yy, mmm, 1)

            Dim dt22 As New Date(yy, mmm, Date.DaysInMonth(yy,mmm)) \'获取该月的最后一天           

            Dim ttt As Table = Tables("表B")          

            DataTables("表BBB").LoadFilter = ""

            DataTables("表BBB").Load()                                     

                For Each dr121 As DataRow In DataTables("表BBB").Select(" 物料组1_销售号= \'" &  Tables("表C").current("销售号")  &"\' And 对比日期 >= #" & dt11 & "# and 对比日期 <= #" & dt22 & "#  ")                   

                    If dr121 IsNot Nothing                       

                        dr121.Delete

                    End If

                Next

           

           

      代码 2:     

           

            For Each dr111 As DataRow In DataTables("表B").Select( " ","物料组1_单价 desc , 物料组2_单价 desc ")

                Dim dr222 As DataRow = DataTables("表BBB").AddNew()

               

                If dr111.IsNull("物料组1_物料编码") =False Then

                    dr222("物料组1_级别") = dr111("物料组1_级别")

                    dr222("物料组1_物料编码") = dr111("物料组1_物料编码")

                    dr222("物料组1_名称") = dr111("物料组1_名称")

                   

                    dr222("物料组1_数量") = dr111("物料组1_数量")

                   

                    dr222("物料组1_单价") = dr111("物料组1_单价")

                End If

                If dr111.IsNull("物料组2_物料编码") =False Then

                    dr222("物料组2_级别") = dr111("物料组2_级别")

                    dr222("物料组2_物料编码") = dr111("物料组2_物料编码")

                    dr222("物料组2_名称") = dr111("物料组2_名称")

                    dr222("物料组2_单价") = dr111("物料组2_单价")

                    dr222("物料组2_数量") = dr111("物料组2_数量")

                End If

                dr222("对比日期")= Date.Today

                dr222("差异类别") = dr111("差异类别")

                dr222("物料组1_销售号") = dr111("物料组1_销售号")

            Next

           


--  作者:有点蓝
--  发布时间:2022/5/12 12:18:00
--  

代码 1还可以优化

  Dim dt11 As New Date(yy, mmm, 1)

            Dim dt22 As New Date(yy, mmm, Date.DaysInMonth(yy,mmm)) \'获取该月的最后一天           

            Dim ttt As Table = Tables("表B")          

            DataTables("表BBB").LoadFilter = ""

            DataTables("表BBB").Load()   

DataTables("表BBB").deletefor(" 物料组1_销售号= \'" &  Tables("表C").current("销售号")  &"\' And 对比日期 >= #" & dt11 & "# and 对比日期 <= #" & dt22 & "#  ")    


代码 2估计是有表事件或者表达式计算影响了

屏蔽表事件

systemready=false

代码 2原来的代码

systemready=true


如果是表达式影响,参考:http://www.foxtable.com/webhelp/topics/1935.htm