现在的系统里面下拉列表比较多,每个列表如果每次都去读取数据库的话,页面load的比较慢。所以想做些改进,想在系统开始的时候就把这些数据读出来,放在全局变量中。
我是vb的初学者,对语法什么的不熟悉。看了写资料感觉collection可能更合适些。于是
1. 在module中声明:
Public co as new collection2. 在一个系统初始化的方法中加入值
co.additem "", ""
...3. 有一个公用方法,根据collection组织combo:
'得到下拉
Public Sub getCombo(ByRef Combo1 As ComboBox, ByVal co As collection)
//这里好像不可以使用co了啊~~
End Sub本来这个思路自我感觉良好的,可是到了第3步就行不通了啊(提示不出了),怎么回事?collection不可以作为参数传递吗?或者大家有更好的方法也可以提示我一下,我对语法不熟悉,欢迎详细,谢拉~~
我是vb的初学者,对语法什么的不熟悉。看了写资料感觉collection可能更合适些。于是
1. 在module中声明:
Public co as new collection2. 在一个系统初始化的方法中加入值
co.additem "", ""
...3. 有一个公用方法,根据collection组织combo:
'得到下拉
Public Sub getCombo(ByRef Combo1 As ComboBox, ByVal co As collection)
//这里好像不可以使用co了啊~~
End Sub本来这个思路自我感觉良好的,可是到了第3步就行不通了啊(提示不出了),怎么回事?collection不可以作为参数传递吗?或者大家有更好的方法也可以提示我一下,我对语法不熟悉,欢迎详细,谢拉~~
Public co As New Collection
Public Function xx(ByVal co As Collection)
Debug.Print co.Item(2)
End Function
窗口中
Private Sub Command1_Click()
xx co
End SubPrivate Sub Form_Load()
co.Add "123"
co.Add "1503"End Sub
一点儿问题也没有啊
然后你都已经是 public 了,直接用吧,不要多余的参数了。
Public cCity As New Collection2. Public Sub getCityCollection()
txtsql = "select code, code_name from city"
Dim mrc As ADODB.Recordset
Set mrc = ExecuteSQL(txtsql)
If mrc.EOF = False Then
mrc.MoveFirst
Do While Not mrc.EOF
cCity.Add mrc.Fields(1), mrc.Fields(0)
mrc.MoveNext
Loop
End If
Set mrc = Nothing
End Sub3. 调用getCityCollection //这样调用上面的过程就出错,在第4步执行的时候报“对象不再有效”
'cCity.Add "南京", "01" //这样直接付值就是好的
'cCity.Add "苏州", "02"4. '组织下拉
Public Sub getComboCity(ByRef Combo1 As ComboBox)
Dim i
For i = 1 To cCity.Count
Combo1.AddItem (cCity(i))
Next
End Sub谁能告诉我为何啊??
我这里没你那数据库,我用99个字符代替。新建一个 form,放一个 combo 控件。然后贴入下面的代码:
Public cCity As New CollectionPublic Sub getCityCollection()
Dim i As Integer
For i = 1 To 99
cCity.Add "城市" & CStr(i)
Next
End Sub
Public Sub getComboCity(ByRef Combo1 As ComboBox)
Dim i
For i = 1 To cCity.Count
Combo1.AddItem (cCity(i))
Next
End SubPrivate Sub Form_Load()
getCityCollection '建立集合元素
getComboCity Combo1 '将集合内容加入列表控件
End Sub
谢谢楼上各位,我暂时用数组吧,这个下次再研究