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


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

主题:加载很慢

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
加载很慢  发帖心情 Post By:2015/11/15 11:32:00 [显示全部帖子]

把当前表的数据加载到另外的表 (5千多条)花了好多分钟 代码如下:

Dim Cols1() As String = {"项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","收货时间","是否采购订单","车型","司机","车牌","车数","出车日期" }
Dim Cols2() As String = {"项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","收货时间","是否采购订单","车型","司机","车牌","车数","出车日期" }
Dim count As Integer = 0
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
        dr = DataTables("客服跟单").AddNew
        count += 1
    End If
    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

 

需要如何改进

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/15 11:59:00 [显示全部帖子]

更换代码之后 加载到另一张表用时三分钟 (正常嘛 )5588条数据 另一张表的DataColChanged事件里有:

For Each r As Row In Tables("客服跟单").Rows
    r("项目") = r("项目").Trim
Next

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/15 12:42:00 [显示全部帖子]

 

With 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
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
 Next
    .ResumeRedraw

End
With


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/15 12:43:00 [显示全部帖子]

这样加绘制吗?


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 9:39:00 [显示全部帖子]

可是加了绘制限制 也还是3分钟啊

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 10:14:00 [显示全部帖子]

用数组方式确实快了不少 以前应该是五六分钟的 快了一倍 可以接受

重置列也很慢 我重置了 车牌 与客户 列  比加载还慢  代码是:

Select Case e.DataCol.name
    Case "客户"
        Dim dr As DataRow = DataTables("客户地点").Find("[客户] = '" & e.NewValue & "'")
        If dr Is Nothing Then
            dr = DataTables("客户地点").AddNew()
            dr("客户") = e.DataRow("客户")
            dr("地点") = e.DataRow("地点")
        Else
            e.DataRow("地点") = dr("地点")
        End If
    Case "地点"
        Dim dr As DataRow = DataTables("客户地点").Find("客户 = '" & e.DataRow("客户") & "'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select
Select Case e.DataCol.name
    Case "司机", "车牌", "出车日期","项目","城市","客户","车型","地点"
        Dim filter As String = "司机 = '" & e.DataRow("司机") & "' and 车牌 = '" & e.DataRow("车牌") & "' and 出车日期 = #" & e.DataRow("出车日期") & "#"
        Dim drs As List(of DataRow) = e.DataTable.Select(filter)
        For Each dr As DataRow In drs
            If DataTables("价目表").DataCols.Contains("车型_" & e.DataRow("车型")) Then
                Dim jdrs As List(of DataRow) = DataTables("价目表").Select("项目 like '%" & e.DataRow("项目") & "%' and 城市 like '%" & e.DataRow("城市") & "%'")
                For Each jdr As DataRow In jdrs
                    If e.DataRow("地点") Like "*" & jdr("地点") & "*" Then
                        e.DataRow("运费") = jdr("车型_" & e.DataRow("车型"))
                        Exit For
                    End If
                Next
            End If
        Next
        drs = e.DataTable.Select(filter, "运费 desc")
        For i As Integer = 0 To drs.Count - 1
           
            Select Case drs(i)("车型")
                Case "9M6"
                    drs(i)("点费") = 80
                Case "6M2","6M8","7M6"
                    drs(i)("点费") = 60
                Case "4M5","4M2"
                    drs(i)("点费") = 30
            End Select
           
            If i = 0 Then
                drs(i)("点费") = Nothing
            Else
                drs(i)("运费") = Nothing
            End If
        Next
        For Each str As String In e.DataTable.GetValues("送货地址", filter)
            drs = e.DataTable.Select(filter & " and 送货地址 = '" & str & "'")
            For i As Integer = 0 To drs.Count - 1
                If i > 0 Then
                    drs(i)("点费") = Nothing
                End If
            Next
        Next
End Select
Select Case e.DataCol.name
    Case "车牌","车数"
        Dim dr As DataRow = DataTables("车辆信息").Find("[车牌] = '" & e.DataRow("车牌") & "'")
        If dr IsNot Nothing Then
            e.DataRow("装载量") = dr("装载量") * e.DataRow("车数")
        End If
End Select

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 11:34:00 [显示全部帖子]

.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:翔越物流管理系统 (3)_201511161107.part01.rar

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:翔越物流管理系统 (3)_201511161107.part02.rar

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:翔越物流管理系统 (3)_201511161107.part03.rar


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 11:37:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:翔越物流管理系统 (3)_201511161107.part04.rar

  登录界面关掉就行 直接在调度配载导入 导入完成 按车型转换 然后再全选所有行 按配载完成

 

[此贴子已经被作者于2015/11/17 1:29:24编辑过]

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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 11:44:00 [显示全部帖子]

我是按照工作流程一步一步往下个工作部门提交数据的 所以在数据处理完成时会把已经处理的数据提交到下一个工作环节 在窗口都有提交按钮 请测试 另外能否给些建议 要如何改才能更高效

文本提示 只在一瞬间显示 怎样让它在数据一开始导入就显示  目录树能不能加个查询按钮 数据交替怎样能更快速些 (包括重置列)


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 13:35:00 [显示全部帖子]

Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum =  ls.Count - 1 '设置最大值
p.Minimum = 0 '设置最小值
p.Value = 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
        If i Mod  100 =  0  Then
            p.Value = 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

DataTables("客服跟单").ResumeRedraw

 

 

我是这样加进度条的  第二次提交会报错  p.Maximum =  ls.Count - 1 '设置最大值 (值等于-1)这要怎样改


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