Foxtable(狐表)用户栏目专家坐堂 → [求助]请教删除重复值的问题!


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

主题:[求助]请教删除重复值的问题!

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
[求助]请教删除重复值的问题!  发帖心情 Post By:2013/4/7 12:00:00 [只看该作者]

有3个列  删除表中3列都相等的重复行 ,只保留一行   怎么弄?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/7 12:19:00 [只看该作者]

这个不是很好处理,最好是当初添加的时候就限制不能重复.
目前只想到了比较笨的实现方式,这样批量循环的话很没效率.如果数据量大的话会耗时很久.我再想想看能不能想到比较好的办法.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/4/7 14:51:00 [只看该作者]

试试这个代码,大量数据 没有测试过.

Dim t As Table =  Tables("表A")
t.Select(t.Rowsel,t.cols("第一列").Index)
syscmd.Filter.ShowRedundantValues
For i As Integer = t.Rows.Count -1 To 0 Step -1
    t.rows(i).Delete
Next
t.Datable.Save
t.filter = ""

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/4/7 14:52:00 [只看该作者]

可能会闪屏  加个停止绘制试试.

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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/4/7 15:34:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/4/8 10:31:00 [只看该作者]

以下是引用muhua在2013-4-7 15:34:00的发言:

Dim i As Integer
For i  = DataTables("表A").DataRows.Count-1 To 0 Step -1
    Dim dr As DataRow = DataTables("表A").DataRows(i)
    Dim dr2 As DataRow = DataTables("表A").Find("第一列='" & dr("第一列") & "' and 第二列='" & dr("第二列") & "' and _Identify <> " & dr("_Identify"))
    If dr2 IsNot Nothing Then
        dr2.Delete
    End If
Next

 

执行了一下 卡了。。。 一直不动  代码能优化不?

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


加好友 发短信
等级:等待验证 帖子:3855 积分:20692 威望:0 精华:5 注册:2012/6/21 14:03:00
  发帖心情 Post By:2013/4/8 11:20:00 [只看该作者]

用户已被锁定

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/4/8 13:42:00 [只看该作者]

 8万多条

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/4/8 14:31:00 [只看该作者]

我现在碰到一个头疼的问题 就是填充  接收表里本来就存在的数据  用filter填充后 居然还能重复填充了一次 才导致这么多数据量

Dim wbl1 As WinForm.Table = e.Form.Controls("Table1")
Dim tbl1 As Table = wbl1.Table
tbl1.DataTable.Save()

Dim v As Double
v = Tables("售后客户录入_table1").Compute("max(公里数)")
Dim d As Date
d  = Tables("售后客户录入_table1").Compute("max(进店时间)")

If e.Form.controls("textbox1").text = v  And e.Form.controls("DateTimePicker2").text = d Then
    Tables("售后客户档案_售后客户档案Table2").current.save()
    e.sender.Enabled = False
Else
    If DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "'") >= 3 Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A"
    ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "'") = 2 Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "B"
    ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "'") = 1 Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "C"
        'ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& date.today.addyears(-1)&"# and 底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "'") <= 1 Then
        'ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-2) &"# And 底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "'") = 0 Then
        'Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "无效档案"
    Else
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "D"
    End If
   
    If (e.Form.controls("textbox1").text - v) < 7000 And (CDate(e.Form.controls("DateTimePicker2").value) - d).totaldays < 180 Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A"
    End If
   
    If Date.Today.addmonths(-3) < Tables("售后客户档案_售后客户档案Table2").current("建档日期") Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A"
    End If
   
    If Tables("售后客户档案_售后客户档案Table2").current.IsNull("编号") = True Then
        Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "E"
    End If
   
    Tables("售后客户档案_售后客户档案Table2").current.save()

    Dim g As New Filler
    g.SourceTable = DataTables("售后客户档案_售后客户档案Table2") '指定数据来源
    g.SourceCols = "底盘号,里程,最后进店日期" '指定数据来源列
    g.DataTable = DataTables("售后客户录入_Table1")'指定数据接收表
    g.DataCols = "底盘号,公里数,进店时间" '指定数据接收列
    g.ExcludeExistValue =True
    g.ExcludeNullValue =False
    g.Distinct =True
    g.Append =True
    g.Fill()

 
    Dim wbl As WinForm.Table = e.Form.Controls("Table1")
    Dim tbl As Table = wbl.Table
    tbl.DataTable.Save()
   
    DataTables("售后客户档案_售后客户档案Table1").load
    Tables("售后客户档案_售后客户档案Table1").filter = "底盘号 = '" & Tables("售后客户档案_售后客户档案Table2").Current("底盘号") & "'"
    Tables("售后客户档案_售后客户档案Table1").Sort = "进店时间"
    e.sender.Enabled = False
End If

就是红色这段~  只要一保存 就把来源表的3000多数据 全部填充进了 接收表 不管有没重复

  g.ExcludeExistValue =True

    g.Distinct =True

这2句 貌似没起到效果!
[此贴子已经被作者于2013-4-8 14:34:03编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1165 积分:9032 威望:0 精华:1 注册:2011/5/25 16:33:00
  发帖心情 Post By:2013/4/9 8:52:00 [只看该作者]

以下是引用muhua在2013-4-8 11:20:00的发言:

Dim i As Integer
For i  = DataTables("订单").DataRows.Count-1 To 0 Step -1
    Dim dr As DataRow = DataTables("订单").DataRows(i)
    Dim dr2 As DataRow = DataTables("订单").Find("产品='" & dr("产品") & "' and 客户='" & dr("客户") & "' and _Identify <> " & dr("_Identify"))
    If dr2 IsNot Nothing Then
        dr2.Delete
    End If
    Application.DoEvents   
Next

 

数据量很大吗?

很慢  一条条的在删除
[此贴子已经被作者于2013-4-9 8:56:01编辑过]

 回到顶部
总数 15 1 2 下一页