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


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

主题:加载很慢

帅哥哟,离线,有人找我吗?
sf020cf
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

 


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


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

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
帅哥哟,离线,有人找我吗?
sf020cf
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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)这要怎样改


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 13:38:00 [只看该作者]

进度条怎样在数据加载时才显示 不加载是隐藏

 


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


加好友 发短信
等级:一尾狐 帖子:412 积分:2665 威望:0 精华:0 注册:2015/10/2 23:48:00
  发帖心情 Post By:2015/11/16 13:56:00 [只看该作者]

红袍版主 能否直接在上传的例子里帮忙把调度配载重置车牌列 和应付款项的客户与车牌列重置优化

还有进度条的问题  拜托

 

[此贴子已经被作者于2015/11/16 13:59:16编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | 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楼


 回到顶部
总数 50 上一页 1 2 3 4 5 下一页