Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
有以下代码,以实现自动删除“表A” 的重复行 ,
由于本人学习水平有限,有个两问题,请狐爹耐心指导一二。
============================分割行========================
Dim dt As DataTable = DataTables("表A")
Dim hang As DataRow
With dt '开打锁行功能
.AllowLockRow = True
.AllowUnlockRow = True
End With
For i As Integer = 0 To dt.DataRows.count - 2 '遍历全部数据行
hang = dt.DataRows(i) '取当前行的值
hang.Locked = True '锁定当前行
dt.DeleteFor("[列1] = " & hang("列1") & " And " & "[列2] = " & hang("列2") …… ) '删除符合N项条件的行
hang.Locked = False '解锁当前行
Next
===========================分割线==========================
问题1:
第一次运行提示错误“Index was outside the bounds of the array.” ,再次运行正常, 何解?
问题2:
请狐爹传授下 ,其它更加科学、高效的方式,以及涉及到的主要命令语句
我对excel2007没研究,不知道它是怎样删除重复项的。
你还是说说你的实际要求吧
比如,只要表中重复项目全部删除,还是保留一条多余的再删除?
还是以当前行为条件,再寻找整个表中有无重复项再删除?
谢谢你!
比如有5行的内容(包含各种类型的值)完全相同,
那么保留指定的当前行(已被锁定,所以保留下来), 删除其它多余的4行(这是遍历对比的思路,其实效率较低,求指点更加精辟的方法)。
还有个问题就是
一共大概有 400多行 数据, 列字段有 14个 左右(有各种类型的值,比如数字、字符、日期等等)
每次打开,第一次运行代码必然会出现,“Index was outside the bounds of the array.” 再次运行就正常了。这是为什么?
这种要求还是直接后台删除效率高一些,如果用遍历的方法效率会很低的。
比如;
Dim cmd As New SQLCommand
cmd.CommandText = "Delete From {表A} where [_Identify] Not In (Select max([_Identify]) From {表A} Group by 第一列,第二列)"
cmd.ExecuteNonQuery()
DataTables("表A").Load()
使用 SQLCommand 语句 ,调试程序成功
高效、节能、环保,效率提高明显,还不伤手的。 赞!
但直接操作底层数据,没有后悔药吃,始终心里不踏实,待继续学到 SQL 章节后, 再自行改良。
谢谢您的耐心指点。