Foxtable(狐表)用户栏目专家坐堂 → 请帮忙优化代码 ,估计 for each嵌套太多了


  共有4032人关注过本帖树形打印复制链接

主题:请帮忙优化代码 ,估计 for each嵌套太多了

帅哥哟,离线,有人找我吗?
zhchling
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
请帮忙优化代码 ,估计 for each嵌套太多了  发帖心情 Post By:2014/6/7 14:46:00 [只看该作者]

是有关房态表的一段代码,  我估计是嵌套的FOR EACH太多了, 执行起来有明显的延迟,估计1秒以上.

 

看能否优化代码,提高效率?

 

Dim mon As Integer = Tables("userb").current("zcldidariqi").Month
Dim days As Integer = Date.DaysInMonth(Tables("userb").current("zcldidariqi").Year,Tables("userb").current("zcldidariqi").Month)
Dim s As String

If Tables("userb").current("zcldidariqi").adddays(3).day < Tables("userb").current("zcldidariqi").day Then  '如果跨月
      For j As Integer = Tables("userb").current("zcldidariqi").day To days
          s + = "' ' As " & mon & "月" & j & "日,"
      Next
  Else   '正常一个月
      For j As Integer = Tables("userb").current("zcldidariqi").day  To Tables("userb").current("zcldidariqi").adddays(3).day
          s + = "' ' As " & mon & "月" & j & "日,"
      Next
End If

s = "Select  房型, '        ' As 房间号 , " & s.trim(",") & "  from {客房信息表} order by 排序  "

Dim dt As DataTable = DataTables("选房窗口_table1")
dt.Fill( s ,  True)
Tables("选房窗口_table1").Cols("房间号").Width = 55
Tables("选房窗口_table1").Cols("房型").Width = 55

If dt.DataRows.Count < DataTables("客房信息表").DataRows.Count Then
    dt.AddNew(DataTables("客房信息表").DataRows.Count - dt.DataRows.Count)
End If
For i As Integer = 0 To DataTables("客房信息表").DataRows.Count - 1
    For j As Integer = 0 To dt.DataRows.Count - 1
        If i = j Then
            dt.DataRows(j)("房间号") = DataTables("客房信息表").DataRows(i)("房间号")
        End If
    Next
Next
For Each ftdr As DataRow In dt.DataRows
    For Each ftdc As DataCol In dt.DataCols
        For Each xcdr As DataRow In DataTables("zclxingcheng").DataRows
            If xcdr("日期").Year = Date.Today.Year AndAlso xcdr("日期").Month & "月" & xcdr("日期").Day & "日" = ftdc.Name AndAlso xcdr("房间号").Contains(ftdr("房间号")) Then
                Dim dr As DataRow = DataTables("userb").Find("ID = '" & xcdr("客户ID") & "'")
                If dr IsNot Nothing
                    ftdr(ftdc.Name) + = dr("name") & ","
                End If
            End If
        Next
        ftdr(ftdc.Name) = ftdr(ftdc.Name).Trim(",")
    Next
Next

e.Form.Text = Date.Today.Year & "年" & Date.Today.Month & "月房态表"


'以下是把原有的房间号的行的复选框勾选上.
Dim zcl As String= Tables("userb.zclxingcheng").current("房间号")
Dim zcls As String =zcl.Replace(" ","") 
For Each r As Row In Tables("选房窗口_table1").Rows
    If zcls.Contains(r("房间号"))    Then
        r.Checked = True
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/6/7 14:49:00 [只看该作者]

这种方式,数据量大了怎么也快不了.

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2014/6/7 14:49:00 [只看该作者]

1秒还不好?就滴答下

 回到顶部
帅哥哟,离线,有人找我吗?
zhchling
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
  发帖心情 Post By:2014/6/7 14:51:00 [只看该作者]

版主回复神速.

 

怎么能换别的方式呢? 房态表的事困扰我很长时间了.


 回到顶部
帅哥哟,离线,有人找我吗?
zhchling
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
  发帖心情 Post By:2014/6/8 14:07:00 [只看该作者]

  For Each xcdr As DataRow In DataTables("zclxingcheng").DataRows       这个是遍历全部表, 怎么限制条件, 比如 只遍历 日期大于今天的行.

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/6/8 15:18:00 [只看该作者]

以下是引用zhchling在2014-6-8 14:07:00的发言:
  For Each xcdr As DataRow In DataTables("zclxingcheng").DataRows       这个是遍历全部表, 怎么限制条件, 比如 只遍历 日期大于今天的行.

 

看这里 http://www.foxtable.com/help/topics/0400.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
zhchling
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
  发帖心情 Post By:2014/6/8 22:02:00 [只看该作者]

http://www.foxtable.com/help/index.html?n=0400.htm

帮助里有关于 查询与赋值并存 会影响效率的文章, 似乎和我的问题有些类似.  但不知道怎么修改代码.

 

   

第3级的FOR EACH里面这段代码非常耗时 
          If xcdr("日期").Year = Date.Today.Year AndAlso    xcdr("日期").Month & "月" & xcdr("日期").Day & "日" = ftdc.Name   AndAlso    xcdr("房间号").Contains(ftdr("房间号")) Then

 

怎么优化却没有思路.

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/6/8 22:05:00 [只看该作者]

 做个例子发上来测试。


 回到顶部
帅哥哟,离线,有人找我吗?
zhchling
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
  发帖心情 Post By:2014/6/8 22:16:00 [只看该作者]

我没有发短信的权利?  版主我怎么联系你?  例子需要单独发给你. 涉及到数据库安全.


 回到顶部
帅哥哟,离线,有人找我吗?
zhchling
  10楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:386 积分:3904 威望:0 精华:0 注册:2012/2/9 20:09:00
  发帖心情 Post By:2014/6/8 22:33:00 [只看该作者]

可否把论坛里发短信的功能打开?

 回到顶部
总数 12 1 2 下一页