Foxtable(狐表)用户栏目专家坐堂 → 状态更新


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

主题:状态更新

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


加好友 发短信
等级:幼狐 帖子:106 积分:923 威望:0 精华:0 注册:2017/3/9 9:05:00
状态更新  发帖心情 Post By:2017/10/18 15:02:00 [只看该作者]

请问什么方法效率更高一点来更新版本状态,数据有几万行,遍历一遍需要很长时间
Rev REV_Status Document_No RecieveDate
B New P055AZOR-01FL00-3092-01 2017/10/2 0:00
A New P055AZOR-01FO00-1164-01 2017/10/2 0:00
O Updated P055AZOR-01FO00-1492-20 2017/10/2 0:00
A New P055AZOR-01FO00-1563-01 2017/10/2 0:00
A New P055AZOR-01FO00-1915-01 2017/10/2 0:00
A New P055AZOR-01FO00-1942-01 2017/10/2 0:00

For Each u As String In DataTables("ISO_Index").SQLGetValues("Document_No")
    If DataTables("ISO_Index").SQLCompute("Count([_Identify])","Document_No = '" & u & "'") > 1 Then
        Dim md As Date = DataTables("ISO_Index").SQLCompute("Max(RecieveDate)","Document_No = '" & u & "'")
        Dim dss As List(Of DataRow)
        dss = DataTables("ISO_Index").SQLSelect("[Document_No] = '" & u & "'")
        For i As Integer = 0 To dss.Count-1
            If dss(i)("RecieveDate") < md Then
                dss(i)("REV_Status") = "Updated"
            Else
                dss(i)("REV_Status")  = "New"
            End If
        Next
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/18 15:40:00 [只看该作者]

方法一:

 

DataTables("ISO_Index").loadfilter = ""
DataTables("ISO_Index").loadTop = "100 percent"
DataTables("ISO_Index").load
msgbox(2)
For Each u As String In DataTables("ISO_Index").GetValues("Document_No")
    If DataTables("ISO_Index").Compute("Count([_Identify])","Document_No = '" & u & "'") > 1 Then
        Dim md As Date = DataTables("ISO_Index").Compute("Max(RecieveDate)","Document_No = '" & u & "'")
        Dim dss As List(Of DataRow)
        dss = DataTables("ISO_Index").Select("[Document_No] = '" & u & "'")
        For i As Integer = 0 To dss.Count-1
            If dss(i)("RecieveDate") < md Then
                dss(i)("REV_Status") = "Updated"
            Else
                dss(i)("REV_Status")  = "New"
            End If
        Next
    End If
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/18 15:44:00 [只看该作者]

方法二:

 

可以先生成分组统计表,得到每个 No 对应的最大值,然后用 SQLReplaceFor 直接更新 http://www.foxtable.com/webhelp/scr/2898.htm

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/18 15:44:00 [只看该作者]

方法三:上传具体实例测试。


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


加好友 发短信
等级:幼狐 帖子:106 积分:923 威望:0 精华:0 注册:2017/3/9 9:05:00
  发帖心情 Post By:2017/10/18 16:25:00 [只看该作者]


请查阅

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


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/18 20:12:00 [只看该作者]

2楼,或者下面代码


Dim dt As DataTable = DataTables("ISO_Index")
dt.loadfilter = ""
dt.loadTop = "100 percent"
dt.load(False)

Dim pdr As DataRow = Nothing
For Each dr As DataRow In dt.Select("", "Document_No, RecieveDate desc")
    If pdr Is Nothing OrElse pdr("Document_No") <> dr("Document_No") Then
        dr("REV_Status")  = "New"
        pdr = dr
    Else
        If dr("RecieveDate")<pdr("RecieveDate") Then
            dr("REV_Status") = "Updated"
        Else
            dr("REV_Status") = "new"
        End If
    End If
Next


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


加好友 发短信
等级:幼狐 帖子:106 积分:923 威望:0 精华:0 注册:2017/3/9 9:05:00
  发帖心情 Post By:2017/10/19 16:13:00 [只看该作者]

谢谢,老师了

 回到顶部