现在的系统里面下拉列表比较多,每个列表如果每次都去读取数据库的话,页面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不可以作为参数传递吗?或者大家有更好的方法也可以提示我一下,我对语法不熟悉,欢迎详细,谢拉~~

解决方案 »

  1.   

    模块中:
    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
    一点儿问题也没有啊
      

  2.   

    首先肯定是可以做参数的,不管是byval 还是 byref
    然后你都已经是 public 了,直接用吧,不要多余的参数了。
      

  3.   

    谢谢~今天做了改进,还是不行:('1集合
    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谁能告诉我为何啊??
      

  4.   

    检查代码,搞清楚错误的语句位置。看以下代码:
    我这里没你那数据库,我用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
      

  5.   

    上面的代码在vb6 sp + xp sp2 中通过!!简体中文。
      

  6.   

    那就奇怪了,只要cCity数据是从数据库里取的就报错,我直接付值的就好了。感觉collection还真难用呢~~
    谢谢楼上各位,我暂时用数组吧,这个下次再研究