以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何找出某个字段的值重复,并把它多余的打勾,再删除?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=97164)

--  作者:蓝才文百
--  发布时间:2017/3/7 11:47:00
--  [求助]如何找出某个字段的值重复,并把它多余的打勾,再删除?
表中有个“货号”字段,许多值是重复导入,现在要把重复多余的值标识出来并勾选,然后剔除。
不过,重复的货号,至少要保留一个,不能都删除了。
求助,用代码如何写?
非常感谢!

--  作者:wyz20130512
--  发布时间:2017/3/7 13:27:00
--  
With DataTables("表A")
    Dim hhs As List(Of String) = .GetValues("货号")
    For Each hh As String In hhs
        Dim dr As DataRow = .Find("货号 = \'" & hh & "\'")
        dr.Locked = True
    Next
    .DeleteFor("")
End With

--  作者:蓝才文百
--  发布时间:2017/3/7 14:35:00
--  
谢谢楼上,不行呢
--  作者:蓝才文百
--  发布时间:2017/3/7 15:11:00
--  
自己用笨办法实现了,效率不行,大家看看,有什么企图更好办法?
Dim tb As WinForm.Table = e.Form.Controls("Table1")
tb.Table.Sort = F1

Dim hhs As List(Of String) = DataTables(TN_SampleList).GetValues(F1)
Dim iTag As Integer

For Each hh As String In hhs

itag=0
For Each r As Row In tb.Table.Rows
If r(F1)=hh Then
If itag<>0 Then r.Checked = True
itag=itag+1
End If
Next
Next


--  作者:蓝才文百
--  发布时间:2017/3/7 15:18:00
--  
如何把找出来的重复行,设置颜色呢?
--  作者:有点色
--  发布时间:2017/3/7 16:14:00
--  

1、可以直接用

 

http://www.foxtable.com/webhelp/scr/1478.htm

 

http://www.foxtable.com/webhelp/scr/2712.htm

 

2、写代码就这样写

 

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
    End If
    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
   
    pdr = dr
Next

If count > 1 Then
    idx &= idx_temp
End If

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


--  作者:wyz20130512
--  发布时间:2017/3/8 10:38:00
--  
2楼代码,经测试没问题呀?每个货号只会留一条记录数据。多余直接全部删除。这不是你想要的效果吗?
[此贴子已经被作者于2017/3/8 10:38:37编辑过]

--  作者:蓝才文百
--  发布时间:2017/3/8 14:49:00
--  
多谢!我使用的是窗口,可能有些属性没有。
另外我需要一个让用户确认的过程,不是直接删除。
你的代码思路是一个快速方法,大家以后查帖子可以多用用看。

--  作者:蓝才文百
--  发布时间:2017/3/8 14:50:00
--  
多谢 色版!