vb listview索引超出边界。。。

Private Sub Getdata()
Dim Li_rowcount As Integer
Dim Li_i As Integer
If my_conn.State = adStateClosed Then my_conn.Open
my_recordset.Open "Select * From 章节", my_conn, adOpenStatic, adLockReadOnly
Li_rowcount = my_recordset.RecordCount - 1

For Li_i = 0 To Li_rowcount
ListView1.ListItems.Add , , Li_i + 1
ListView1.ListItems.Item(Li_i + 1).SubItems(1) = my_recordset.Fields(0).Value///从这里报错了
ListView1.ListItems.Item(Li_i + 1).SubItems(2) = my_recordset.Fields(2).Value
ListView1.ListItems.Item(Li_i + 1).SubItems(3) = my_recordset.Fields(3).Value

my_recordset.MoveNext
Next
my_recordset.Close
End Sub

我是新手,多多指教了
忘了补全了。。。
Dim Ls_conn As String
Dim my_conn As ADODB.Connection
Dim my_recordset As ADODB.Recordset
Private Sub Form_Load()

Ls_conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data.mdb;Persist Security Info=False"

Set my_conn = New ADODB.Connection
Set my_recordset = New ADODB.Recordset
my_conn.ConnectionString = Ls_conn
Getdata

Text1.Text = ""

Text2.Text = ""
Combo1.AddItem "第一章"
Combo1.AddItem "第二章"
Combo1.AddItem "第三章"
Combo1.AddItem "第四章"
Combo1.ListIndex = 0
ListView1.ColumnHeaders.Add , , "编号"
ListView1.ColumnHeaders.Add , , "类型"
ListView1.ColumnHeaders.Add , , "章节"
ListView1.GridLines = True
ListView1.FullRowSelect = True
ListView1.Sorted = True
ListView1.View = lvwReport
ListView1.FullRowSelect = True
listvuew1.HideSelection = False

End Sub

问题是在这基础上出现的

你应该首先用ListView1.ColumnHeaders.Add添加ColumnHeaders才能用SubItems
再现了一下问题,修改如下你再试一试,有时用F8分步调试问题很容易就出来了
Dim Ls_conn As String
Dim my_conn As ADODB.Connection
Dim my_recordset As ADODB.Recordset
Private Sub Form_Load()

Ls_conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\data.mdb;Persist Security Info=False"

Set my_conn = New ADODB.Connection
Set my_recordset = New ADODB.Recordset
my_conn.ConnectionString = Ls_conn

Text1.Text = ""

Text2.Text = ""
Combo1.AddItem "第一章"
Combo1.AddItem "第二章"
Combo1.AddItem "第三章"
Combo1.AddItem "第四章"
Combo1.ListIndex = 0
ListView1.ColumnHeaders.Add , , "编号"
ListView1.ColumnHeaders.Add , , "类型"
ListView1.ColumnHeaders.Add , , "章节"
ListView1.GridLines = True
ListView1.FullRowSelect = True
ListView1.Sorted = True
ListView1.View = lvwReport
ListView1.FullRowSelect = True
ListView1.HideSelection = False
Getdata '把这一步放到这里试一试,问题出在这里 可以看出来你没有用F8分步调试,你在调用这个函数以前还没有运行ColumnHeaders.Add 自然会出错了

End Sub

Private Sub Getdata()
Dim Li_rowcount As Integer
Dim Li_i As Integer
If my_conn.State = adStateClosed Then my_conn.Open
my_recordset.Open "Select * From 章节", my_conn, adOpenStatic, adLockReadOnly
Li_rowcount = my_recordset.RecordCount - 1

For Li_i = 0 To Li_rowcount
ListView1.ListItems.Add , , Li_i + 1
ListView1.ListItems.Item(Li_i + 1).SubItems(1) = my_recordset.Fields(0).Value '从这里报错了
ListView1.ListItems.Item(Li_i + 1).SubItems(2) = my_recordset.Fields(2).Value
ListView1.ListItems.Item(Li_i + 1).SubItems(3) = my_recordset.Fields(3).Value

my_recordset.MoveNext
Next
my_recordset.Close
End Sub
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-26
你定义的ListView1一共三列(编号、类型、章节),其中第一列”编号“直接用listView1.listitems.Add来添加值,第二列”类型“和第三列”章节“分别用Listview1.listitems(Li_i + 1).SubItems(1)和分别用Listview1.listitems(Li_i + 1).SubItems(2)来添加值。
你这里没有Listview1.listitems(Li_i + 1).SubItems(3)(也就是没有第4列)追问

For Li_i = 0 To Li_rowcount
ListView1.ListItems.Add , , Li_i + 1
ListView1.ListItems.Item(Li_i + 1).SubItems(1) = my_recordset.Fields(1).Value
ListView1.ListItems.Item(Li_i + 1).SubItems(2) = my_recordset.Fields(2).Value

my_recordset.MoveNext
Next
我这样改完了,错误依旧。。。我想问是不是数据库的问题,我用的是access2003,不是sql

相似回答