以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  for each 遍历方法效率是不是有点低?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=38750)

--  作者:westwolf
--  发布时间:2013/8/6 10:01:00
--  for each 遍历方法效率是不是有点低?

狐爸帮忙看看这段代码,做上100次循环居然要1分钟左右。请帮忙优化下。感谢!

 

For Each r As DataRow In DtEmployee.DataRows
 strCName = r("员工姓名")
  If strCName = strCCName Then
        strTel = r("联系电话") 
 \'=====
        \'面护
 \'=====
 strF =strFilter2 & "  And [项目大类] = \'面护\'"
 nXCount = DtCstmCard.Compute("Sum(期初金额)", strF)
        DtEmployee.DataCols("面护_销售业绩").AllowEdit = True
        r("面护_销售业绩") =  nXCount
        DtEmployee.DataCols("面护_销售业绩").AllowEdit = False
 
 strF =strFilter & "  And [项目大类] = \'面护\'"
 nSCount = DtNurse.Compute("Sum(次数)", strF)
        DtEmployee.DataCols("面护_护理次数").AllowEdit = True
        r("面护_护理次数") =   nSCount
        DtEmployee.DataCols("面护_护理次数").AllowEdit = False

 

NEXT

 

END IF


--  作者:狐狸爸爸
--  发布时间:2013/8/6 10:04:00
--  

这样看看:

For i As Integer = 0 To DtEmployee.DataRows.Count -1
    Dim r sa DataRow = DtEmployee.DataRows(i)
    strCName = r("员工姓名")
    If strCName = strCCName Then
        strTel = r("联系电话")
        \'=====
        \'面护
        \'=====
        strF =strFilter2 & "  And [项目大类] = \'面护\'"
        nXCount = DtCstmCard.Compute("Sum(期初金额)", strF)
        DtEmployee.DataCols("面护_销售业绩").AllowEdit = True
        r("面护_销售业绩") =  nXCount
        DtEmployee.DataCols("面护_销售业绩").AllowEdit = False
       
        strF =strFilter & "  And [项目大类] = \'面护\'"
        nSCount = DtNurse.Compute("Sum(次数)", strF)
        DtEmployee.DataCols("面护_护理次数").AllowEdit = True
        r("面护_护理次数") =   nSCount
        DtEmployee.DataCols("面护_护理次数").AllowEdit = False
    Next
End If

 

如果还是不行,可以看看:

http://www.foxtable.com/help/topics/2225.htm

 


--  作者:Bin
--  发布时间:2013/8/6 10:07:00
--  
你好,效率低的不是FOr EACH循环 而是你里面执行的操作哦.
--  作者:pengjiam
--  发布时间:2013/8/6 12:11:00
--  

先纠正代码错误:

    Next
End If
应为:

   end if

next