Foxtable(狐表)用户栏目专家坐堂 → [求助]如何找出某个字段的值重复,并把它多余的打勾,再删除?


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

主题:[求助]如何找出某个字段的值重复,并把它多余的打勾,再删除?

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


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
[求助]如何找出某个字段的值重复,并把它多余的打勾,再删除?  发帖心情 Post By:2017/3/7 11:47:00 [只看该作者]

表中有个“货号”字段,许多值是重复导入,现在要把重复多余的值标识出来并勾选,然后剔除。
不过,重复的货号,至少要保留一个,不能都删除了。
求助,用代码如何写?
非常感谢!

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


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By: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

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


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By:2017/3/7 14:35:00 [只看该作者]

谢谢楼上,不行呢

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


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By: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


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


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By:2017/3/7 15:18:00 [只看该作者]

如何把找出来的重复行,设置颜色呢?

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By: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
  7楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1249 积分:9474 威望:0 精华:0 注册:2013/5/12 9:22:00
  发帖心情 Post By:2017/3/8 10:38:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
蓝才文百
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By:2017/3/8 14:49:00 [只看该作者]

多谢!我使用的是窗口,可能有些属性没有。
另外我需要一个让用户确认的过程,不是直接删除。
你的代码思路是一个快速方法,大家以后查帖子可以多用用看。

 回到顶部
帅哥哟,离线,有人找我吗?
蓝才文百
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:400 积分:2486 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By:2017/3/8 14:50:00 [只看该作者]

多谢 色版!

 回到顶部