Foxtable(狐表)用户栏目专家坐堂 → [求助]关于效率优化的问题~~~~~~~~~~


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

主题:[求助]关于效率优化的问题~~~~~~~~~~

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
[求助]关于效率优化的问题~~~~~~~~~~  发帖心情 Post By:2013/1/25 14:44:00 [显示全部帖子]

 在一个窗口table的一个按钮 button里有一段代码

图片点击可在新窗口打开查看此主题相关图片如下:表格.jpg
图片点击可在新窗口打开查看


Dim dtb As New DataTableBuilder("历史进店记录1")
dtb.Build()
DataTables("历史进店记录1").Fill("Select * From [历史进店记录]","华泰内控系统-ERP",False)
Tables("售后客户档案_售后客户档案Table2").StopRedraw

For Each dr As Row In Tables("售后客户档案_售后客户档案Table2")
    If DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") >= 3 Then
        dr("客户等级") = "A"
    ElseIf DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") = 2 Then
        dr("客户等级") = "B"
    ElseIf DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") = 1 Then
        dr("客户等级") = "C"
    Else
        dr("客户等级") = "D"
    End If
   
    If Functions.Execute("服务器时间").addmonths(-3) < dr("建档日期") Then
        dr("客户等级") = "A"
    End If
   
    If dr.IsNull("编号") = True Then
        dr("客户等级") = "E"
    End If
Next
Tables("售后客户档案_售后客户档案Table2").ResumeRedraw



这段代码就是用来根据今天的时间来调整 整个表里的客户等级    我一执行这段代码就出现卡死,
后来我优化了代码,采用了查询与赋值分开的做法




Dim dtb As New DataTableBuilder("历史进店记录1")
dtb.Build()
DataTables("历史进店记录1").Fill("Select * From [历史进店记录]","华泰内控系统-ERP",False)
Tables("售后客户档案_售后客户档案Table2").StopRedraw

Dim Dic As new Dictionary(of Row, String)
For Each dr As Row In Tables("售后客户档案_售后客户档案Table2")
    If DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") >= 3 Then
        dic.Add(dr, "A")
    ElseIf DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") = 2 Then
        dic.Add(dr, "B")
    ElseIf DataTables("历史进店记录1").Compute("Count(进店时间)","进店时间 >= #"& Functions.Execute("服务器时间").addyears(-1) &"# And 底盘号 = '" & dr("底盘号") & "'") = 1 Then
        dic.Add(dr, "C")
    Else
        dic.Add(dr, "D")
    End If
Next

For Each dr As Row In dic.Keys
    dr("客户等级") = dic(dr)
Next
Tables("售后客户档案_售后客户档案Table2").ResumeRedraw

但是还出现卡死,求解了~~~~~~~~~~~~~~~~~~

[此贴子已经被作者于2013-1-25 14:45:46编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/2/4 18:16:00 [显示全部帖子]

 代码基本写出来了,但是有个小问题 。由于代码比较繁琐,所以放项目出来,希望解答下~~~
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.rar



在主表为 售后客户档案里 的情况下 我在命令窗口执行下面的命令会出错


图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看


Dim dt As Date = Date.Today
Dim dt1 As Date
Dim sm As Double
Dim v As Double
Dim ro As Row

Tables("售后客户档案").StopRedraw
Dim Dic As new Dictionary(of Row, String)
Dim drs As List(of DataRow)
For Each dr As Row In Tables("售后客户档案").Rows
    drs = DataTables("历史进店记录").Select("底盘号 = '" & dr("底盘号") & "'","公里数 desc")
    v = drs(0)("公里数")
    drs = DataTables("历史进店记录").Select("底盘号 = '" & dr("底盘号") & "'","进店时间 desc")
    dt1 = drs(0)("进店时间")
    If  v < 7000 And (CDate(drs(0)("进店时间")) - dt1).totaldays < 180 Then   '''最大公里数未超过7000公里,半年之内有来过店里维修的
        dic.Add(dr, "A")
        Continue For
    End If
    If dt.addmonths(-3) < dr("建档日期") Then
        dic.Add(dr, "A")
        Continue For
    End If
    If dr.IsNull("编号") = True Then
        dic.Add(dr, "E")
        Continue For
    End If

   
    sm = 0   '''根据drs的历史进店记录来计算来店的的次数
    For Each dr1 As DataRow In drs
        If dr1("进店时间") >= dt.addyears(-1) Then
            sm = sm + 1
        Else
            Continue For
        End If
    Next
   
    If sm >=3 Then
        dic.Add(dr, "A")
    ElseIf sm = 2 Then
        dic.Add(dr, "B")
    ElseIf sm = 1 Then
        dic.Add(dr, "C")
    Else
        dic.Add(dr, "D")
    End If
Next
For Each dr As Row In dic.Keys
    dr("客户等级") = dic(dr)
Next
Tables("售后客户档案").ResumeRedraw

貌似把红色的部分删除了 就没啥问题 



[此贴子已经被作者于2013-2-4 18:29:26编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/2/5 9:53:00 [显示全部帖子]

 究竟是什么问题??

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/2/5 21:32:00 [显示全部帖子]

 红色部分 要添加的  您有话的代码里貌似没这段~

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/2/7 11:24:00 [显示全部帖子]

 多谢了 我去调试下看看!

 回到顶部