以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  为什么报“索引超出了数组界限”  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=48259)

--  作者:zengpeng26
--  发布时间:2014/3/26 11:02:00
--  为什么报“索引超出了数组界限”
请给位大侠看看这写代码有什么问题。
总是报“索引超出了数组界限”。

还有怎么样把这个赋值以及检索分来运算?

Dim dt As DataTable = DataTables("管理内客户")
Dim dr,dr1 As DataRow
For i As Integer = 0 To dt.DataRows.Count -1
    dr = dt.DataRows(i)
    dr1 = dt.Find("[车辆底盘号]  = \'" & dr("车辆底盘号") & "\'","里程 Desc" ,1) 
    If dr1 IsNot Nothing Then
        dr1.Delete
    End If
Next
[此贴子已经被作者于2014-3-26 11:07:44编辑过]

--  作者:Bin
--  发布时间:2014/3/26 11:05:00
--  
dr1 = dt.Find("[车辆底盘号]  = \'" & dr("车辆底盘号") & "\'","里程 Desc" ,0) 
--  作者:jspta
--  发布时间:2014/3/26 11:07:00
--  


不明白你这样操作的目的是什么。
[此贴子已经被作者于2014-3-26 11:07:44编辑过]

--  作者:狐狸爸爸
--  发布时间:2014/3/26 11:08:00
--  

这样改一下:

 

Dim dt As DataTable = DataTables("管理内客户")

Dim dr,dr1 As DataRow
For i As Integer = dt.DataRows.Count -1 To 0 Step -1
    dr = dt.DataRows(i)
    dr1 = dt.Find("[车辆底盘号]  = \'" & dr("车辆底盘号") & "\'","里程 Desc" ,0)  \'检索出最近一次的维修结算时间
    If dr1 IsNot Nothing Then
        dr1.Delete
    End If
Next

--  作者:狐狸爸爸
--  发布时间:2014/3/26 11:08:00
--  
说实话,我也觉得代码逻辑很奇怪。
--  作者:zengpeng26
--  发布时间:2014/3/26 11:13:00
--  
感谢狐爸,
代码就是想删除重复值,,可是不知道怎么写,只好用自己知道的find来做了。
可是不知道怎么样把赋值和检索分来。。
[此贴子已经被作者于2014-3-26 11:14:29编辑过]

--  作者:scirocco
--  发布时间:2014/3/26 11:13:00
--  

在循环中删除了某几行,会导致实际行数少于循环次数,到最后i索引超出了表的最大行数,从而提示报错。

循环内判断可以这样写:

If dr1 IsNot Nothing Then

    dr1.Delete
    i = i - 1
End If

--  作者:zengpeng26
--  发布时间:2014/3/26 11:15:00
--  
你找到点了,谢谢你。。
--  作者:狐狸爸爸
--  发布时间:2014/3/26 11:35:00
--  

删除重复值,有简单的办法,例如删除第一列重复值:
 
Tables("表A").RepeatFilter("第一列", 2)
DataTables("表A").DeleteFor(Tables("表A").Filter)
Tables("表A").Filter = ""
 
参考:
http://www.foxtable.com/help/topics/2712.htm


 


--  作者:zengpeng26
--  发布时间:2014/3/26 11:37:00
--  
那只能删除一列的重复值,可是我想删除几行的重复值,咋怎?