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


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

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

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/1/25 15:47:00 [显示全部帖子]

 两个地方存在优化的余地。

 第一个是 获取服务器时间,这个不需要每次重复获取的,在开始的时候获取一次就行了。

 第二个是 你在循环里多次使用到Compute,你可以改用其他的方法统计,参考代码优化一章。当然,最好是上传你的一个下例子啦。

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

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

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/5 11:57:00 [显示全部帖子]

 优化,例子。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目2.table



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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/5 11:57:00 [显示全部帖子]

 代码。
Dim cmd As New SQLCommand
cmd.CommandText = "select a.[_Identify] from {售后客户档案} as a left join {历史进店记录} as b on (a.底盘号 = b.底盘号) where 进店时间 >= #" & Date.Today.AddYears(-1) & "#"
Dim dt As DataTable = cmd.ExecuteReader

DataTables("售后客户档案").StopRedraw
Dim prev As Integer = dt.DataRows(0)("_Identify")
Dim count As Integer = 0
For Each dr As DataRow In dt.DataRows
    If prev <> dr("_Identify") Then
        Dim fdr As DataRow = DataTables("售后客户档案").Find("_Identify = " & prev)
        If count >= 3 Then
            fdr("客户等级") = "A"
        Else If count = 2 Then
            fdr("客户等级") = "B"
        Else If count = 1 Then
            fdr("客户等级") = "C"
        Else
            fdr("客户等级") = "D"          
        End If
        prev = dr("_Identify")
        count = 0
    Else
        count +=1
    End If
Next
DataTables("售后客户档案").ResumeRedraw

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/5 12:14:00 [显示全部帖子]

 或者,代码者可以这样写。

Dim cmd As New SQLCommand
cmd.CommandText = "select a.[_Identify], b.进店时间 from {售后客户档案} as a left join {历史进店记录} as b on (a.底盘号 = b.底盘号)"
Dim dt As DataTable = cmd.ExecuteReader

DataTables("售后客户档案").StopRedraw
Dim prev As Integer = dt.DataRows(0)("_Identify")
Dim count As Integer = 0
For Each dr As DataRow In dt.DataRows
    If prev <> dr("_Identify") Then
        Dim fdr As DataRow = DataTables("售后客户档案").Find("_Identify = " & prev)
            If count >= 3 Then
                fdr("客户等级") = "A"
            Else If count = 2 Then
                fdr("客户等级") = "B"
            Else If count = 1 Then
                fdr("客户等级") = "C"
            Else
            fdr("客户等级") = "D"           
        End If
        prev = dr("_Identify")
        count = 0
    Else If dr("进店时间") >= Date.Today.AddYears(-1) Then
        count +=1
    End If
Next
DataTables("售后客户档案").ResumeRedraw

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/6 9:20:00 [显示全部帖子]

 看看是不是这样。

Dim cmd As New SQLCommand
cmd.CommandText = "select a.[_Identify], a.编号, a.建档日期, b.公里数, b.进店时间 from {售后客户档案} as a left join {历史进店记录} as b on (a.底盘号 = b.底盘号)"
Dim dt As DataTable = cmd.ExecuteReader

DataTables("售后客户档案").StopRedraw
Dim prev As Integer = dt.DataRows(0)("_Identify")
Dim count As Integer = 0
Dim level As String = ""
For Each dr As DataRow In dt.DataRows
    If prev <> dr("_Identify") Then
        Dim fdr As DataRow = DataTables("售后客户档案").Find("_Identify = " & prev)
        If level > "" Then
            fdr("客户等级") = level
        Else
            If count >= 3 Then
                fdr("客户等级") = "A"
            Else If count = 2 Then
                fdr("客户等级") = "B"
            Else If count = 1 Then
                fdr("客户等级") = "C"
            Else
                fdr("客户等级") = "D"
            End If
        End If
        prev = dr("_Identify")
        count = 0
        level = ""
    Else If dr("进店时间") >= Date.Today.AddYears(-1) Then
        count +=1
    End If
    If dr("公里数") < 7000 AndAlso dr("进店时间") > Date.Today.AddDays(-180) Then
        level = "A"
    Else If dr("建档日期") > Date.Today.AddMonths(-3) Then
        level = "A"
    Else If dr.IsNull("编号") Then
        level = "E"
    End If
Next
DataTables("售后客户档案").ResumeRedraw


 回到顶部