VB 实时错误3265

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:41:19
Private Sub 数据列表_ItemClick(ByVal Item As MSComctlLib.ListItem)
' On Error Resume Next
Dim i As Integer
序号.Text = 数据列表.SelectedItem
SQL = "select * from 销售数据 where 序号=" & 序号.Text
Set rs = New ADODB.Recordset
rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
If rs.BOF And rs.EOF Then
For i = 0 To UBound(fhTotal)
Me.Controls(fhTotal(i)).Text = ""
Next
Else
For i = 1 To UBound(fhTotal)
Me.Controls(fhTotal(i)).Text = rs.Fields(fhTotal(i))
Next i
End If
End Sub

fhTotal定义为数组,窗体中的控件都是按照数组来进行命名的。

运行Me.Controls(fhTotal(i)).Text = rs.Fields(fhTotal(i))这段代码到i=10的时候就出现错误,很是纳闷。
因为把Me.Controls(fhTotal(i)).Text = rs.Fields(fhTotal(i))改为MsgBox rs.Fields(fhTotal(i)), , fhTotal(i)的时候,所有的字段都可以弹出来,不知道什么原因呢?

销售数据 where 序号=" & 序号.Text

Me.Controls(fhTotal(i)).Text控件名中的数字序列不能直接用数组代替!
我的建议是,定义一个对象类型的数组,把所有控件赋值给这个数组
比如:
dim arr() as object ={textbox1,textbox2,textbox3}
以后如果要使用textbox1控件,直接用arr(0)代替,比如arr(0).text这样的形式是允许的!因为arr(0)本身指的就是textbox1控件!

Me("Text" & i).Text = rs.Fields(fhTotal(i)) 即可