以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  删除重复值 代码求教  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=89978)

--  作者:qwz405
--  发布时间:2016/9/2 12:23:00
--  删除重复值 代码求教
对于非foxtable创建的外部表, 没有"_Identify"这个字段。
需要删除某个字段重复值,只保留一行数据,代码要如何修改?


Dim idx As String = "-1,"
Dim idx_temp As String = ""
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
Dim cs As String = "第一列"
For Each dr As DataRow In DataTables("表A").Select("", cs)
    
    Dim flag As Boolean = False
    If pdr IsNot Nothing Then
        For Each c As String In cs.split(",")
            If pdr(c) <> dr(c) Then
                flag = True
                Exit For
            End If
        Next
        
        If flag Then
            If count > 1 Then
                idx &= idx_temp
            End If
            count = 1
            idx_temp = ""
        Else
            count += 1
            idx_temp &= dr("_Identify") & ","
        End If
    End If
    
    pdr = dr
Next

If count > 1 Then
    idx &= idx_temp
End If

\'Tables("表A").filter = "_Identify not in (" & idx.trim(",") & ")"

DataTables("表A").DeleteFor("_Identify In (" & idx.trim(",") & ")")


--  作者:有点蓝
--  发布时间:2016/9/2 14:41:00
--  

Tables("表A").RepeatFilter("第一列", 0)
Tables("表A").ApplyFilter = True
Tables("表A").Sort = "第一列"
Dim dr As Row = Tables("表A").Rows(Tables("表A").Rows.Count - 1)
Dim r As Row
For i As Integer = Tables("表A").Rows.Count - 2 To 0 Step -1
    r = Tables("表A").Rows(i)
    If dr("第一列") = r("第一列") Then
        r.Delete
    Else
        dr = r
    End If
Next
Tables("表A").ApplyFilter = False

--  作者:狐狸爸爸
--  发布时间:2016/9/2 14:49:00
--  
也可以用select :

Dim drs As List(of DataRow) = DataTables("表A").Select("","第一列")
For i As Integer = drs.count -1 To 1 Step -1
    If drs(i)("第一列") = drs(i-1)("第一列") Then
        drs(i).delete()
    End If
Next
[此贴子已经被作者于2016/9/2 14:50:15编辑过]