Foxtable(狐表)用户栏目专家坐堂 → 删除重复行速度很慢


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

主题:删除重复行速度很慢

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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
删除重复行速度很慢  发帖心情 Post By:2021/8/31 21:50: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("清点日期 = '" & rq & "' And 编号 = '" & dr("编号") & "' and _Identify > " & dr("_Identify"))
    If dr2 IsNot Nothing Then
        dr2.Delete
    End If
Next

我用上面的代码删除重复行,大概2万行左右,现在已经卡住半小时左右了,删除重复行有更好的方式吗?

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/31 22:09:00 [只看该作者]

看看:http://www.foxtable.com/webhelp/topics/2225.htm

或者
Tables("清点明细").StopRedraw
Tables("清点明细").filter = "清点日期 = '" & rq & "'"
Tables("清点明细").sort = “编号
For i as integer  = Tables("清点明细").Rows.Count-1 To 1 Step -1
    If Tables("清点明细").Rows(i)("编号") = Tables("清点明细").Rows(i-1)("编号") Then
        Tables("清点明细").Rows(i).Delete
    End If
Next
Tables("清点明细").ResumeRedraw

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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/8/31 22:43:00 [只看该作者]

额,两种办法都是相当的快啊
DataTables("sptpb").AddNew
表A的数据复制到表B,用上面这个代码的话,还有更快的方法吗?

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/31 22:51:00 [只看该作者]


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


加好友 发短信
等级:三尾狐 帖子:603 积分:4102 威望:0 精华:0 注册:2019/11/14 23:06:00
  发帖心情 Post By:2021/9/1 1:39:00 [只看该作者]

Dim mda As New MySql.Data.MySqlClient.MySQLDataAdapter("sel ect distinct spdm,pic_name from ipos_sptpk" , conn) '这里可以设置你的查询语句
Dim ds As New System.Data.DataSet()
mda.Fill(ds, "TableTemp") 'MySQLDataAdapter方法把数据放到一个新建的临时表里,这个临时表名可自定义,我这里写TableTemp

For Each r As System.Data.DataRow In ds.Tables(0).Rows
    Dim dr As DataRow = DataTables("SPTP").AddNew()
    dr("spdm") = r("spdm")
    dr("pic_name") = r("pic_name")
Next
conn.close

dim f As New Filler
f
.SourceTable = DataTables("订单"'指定数据来源  
f
.SourceCols = "产品,客户" '指定数据来源列
f
.DataTable = DataTables("统计"'指定数据接收表
f
.DataCols = "产品,客户" '指定数据接收列
f
.Fill() 
'填充数据

黄色的部分不知道该怎么写,之前的写法是蓝色的部分,好像这种临时表,只能用遍历的方式,但是查到下面这种方式,就是黄色方式怎么修改都不对,蓝老师帮我看下有办法不


Dim dt As new System.Data.DataTable
cmd = new MySql.Data.MySqlClient.MySqlCommand("sel ect distinct spdm,pic_name from ipos_sptpk" , conn) 
sdr = cmd.ExecuteReader()

conn.close

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


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/1 8:39:00 [只看该作者]

这种情况只能遍历。Filler仅支持foxtable的表格

 回到顶部