Foxtable(狐表)用户栏目专家坐堂 → 加载很慢


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

主题:加载很慢

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/15 11:39:00 [显示全部帖子]

Dim Cols1() As String = {"项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","收货时间","是否采购订单","车型","司机","车牌","车数","出车日期" }
Dim Cols2() As String = {"项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","收货时间","是否采购订单","车型","司机","车牌","车数","出车日期" }
Dim count As Integer = 0
Dim ls As new List(of Row)
Dim dic As new Dictionary (Of DataRow, Row)
systemready = False
For Each r As Row In Tables("配载订单").GetCheckedRows
    Dim filter As String = "1=1"
    For Each dc As String In Cols1
        If r.IsNull(dc) Then
            filter &= " and " & dc & " is null"
        Else
            Dim c As Col = Tables("客服跟单").Cols(dc)
            If c.IsNumeric Then
                filter &= " and " & dc & " = " & r(dc)
            ElseIf c.IsBoolean Then
                If r(dc) = True Then
                    filter &= " and " & dc & " = true"
                Else
                    filter &= " and " & dc & " = false"
                End If
            ElseIf c.IsDate Then
                filter &= " and " & dc & " = #" & r(dc) & "#"
            Else
                filter &= " and " & dc & " = '" & r(dc) & "'"
            End If
        End If
    Next
    Dim dr As DataRow = DataTables("客服跟单").find(filter)
    If dr Is Nothing Then
        ls.Add(r)
        count += 1
    Else
        dic.add(dr, r)
    End If
   
Next
For Each r As Row In ls
    Dim dr As DataRow = DataTables("客服跟单").AddNew
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
        End If
    Next
Next
For Each key As DataRow In dic.Keys
    Dim r As Row = dic(key)
    Dim dr As DataRow = key
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
        End If
    Next
Next


systemready = True
msgbox("共有 "& count &" 条数据提交" )
Tables("配载订单").save
Tables("配载订单").ClearCheckedRows


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/15 12:02:00 [显示全部帖子]

datacolchanged事件不要这样写代码。

 

换成

 

If e.DataCol.Name = "项目" Then

    e.DataRow("项目") = e.DataRow("项目").Trim

End If


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/15 12:02:00 [显示全部帖子]

如果还觉得慢,就加上代码

 

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

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/15 15:17:00 [显示全部帖子]

呃,是。

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 9:42:00 [显示全部帖子]

你查找的条件多,而且查找的数据量大,耗时是肯定的。

 

但2楼的代码应该不会运行太久,具体上传例子说明。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 10:26:00 [显示全部帖子]

慢很正常,因为你这段代码要频繁find、select、GetValues,都是比较耗时的,数据量越大,就越慢。

 

要不你就不要重置列,原先的逻辑,单独用一个按钮来实现。具体上传例子。


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 12:00:00 [显示全部帖子]

1、装配完成的按钮代码已经最快了。

 

2、你可以做一个进度条嘛,参考 http://www.foxtable.com/help/topics/0793.htm

 

3、目录树查询按钮是什么意思?查目录树节点?你可以循环所有的节点,看是否匹配,如代码

 

Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Text = "123456" Then
        trv.SelectedNode = nd
    End  If
Next

 

4、重置列,肯定不能快的了。要自己另外弄按钮执行代码去实现原来的逻辑,不同的列的重置列,有不同的优化方式。比如12楼的,你可以这样写按钮代码

 

For Each ary() As String In DataTables("应付款项").GetValues( "司机|车牌|出车日期")
    Dim filter As String = "司机 = '" & ary(0) & "' and 车牌 = '" & ary(1) & "' and 出车日期 = #" & ary(2) & "#"
    Dim fdr As DataRow = DataTables("应付款项").Find(filter)
    DataTables("应付款项").DataCols("司机").RaiseDataColChanged(fdr)
Next


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 14:09:00 [显示全部帖子]

1、进度条

 

Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
If ls.count > 0 Then
    p.Visible = True
    p.Maximum =  ls.Count - 1 '设置最大值
    p.Minimum = 0 '设置最小值
    p.Value = 0 '设置当前值
End If
Dim idx As Integer = 0
DataTables("客服跟单").StopRedraw
For Each r As Row In ls
    Dim dr As DataRow = DataTables("客服跟单").AddNew
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
           
        End If
       
    Next
    idx += 1
    p.Value = idx
Next
For Each key As DataRow In dic.Keys
    Dim r As Row = dic(key)
    Dim dr As DataRow = key
    For i As Integer = 0 To Cols1.Length -1
        If r.IsNull(Cols1(i)) Then
            dr(Cols2(i)) = Nothing
        Else
            dr(Cols2(i)) = r(Cols1(i))
        End If
    Next
Next

DataTables("客服跟单").ResumeRedraw
p.Visible = False

 

 

 

2、看16楼


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 15:20:00 [显示全部帖子]

车牌、车型的重置列,没有优化空间,代码最优了。

 

If e.DataCol.Name = "车牌" Then '发生变化的是产品编号吗?
    '在产品表找出该产品
    Dim dr As DataRow
    dr = DataTables("车辆信息").Find("车牌 = '" & e.DataRow("车牌") & "'" )
    If dr IsNot Nothing '如果找到, 则设置各列内容
        e.DataRow("司机")= dr("司机")
        e.DataRow("车型")= dr("车型")
        e.DataRow("车辆属性")= dr("车辆属性")
    End If
End If


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/16 15:57:00 [显示全部帖子]

代码?报什么错?

 

DataTables("应付款项").DataCols("客户").RaiseDataColChanged() '重置客户列

For Each ary() As String In DataTables("应付款项").GetValues( "司机|车牌|出车日期")
    Dim filter As String = "司机 = '" & ary(0) & "' and 车牌 = '" & ary(1) & "' and 出车日期 = #" & ary(2) & "#"
    Dim fdr As DataRow = DataTables("应付款项").Find(filter)
    DataTables("应付款项").DataCols("司机").RaiseDataColChanged(fdr)
Next


 回到顶部
总数 23 1 2 3 下一页