cGoodsTypes是个集合,cGoodsType是个类,为什么向集合添加对象是,前面的对象都被覆盖,假如:第一个对象为aa,当添加第二个对象bb后,vgoodstypes(1).XXX就变成bb了,然后第二个对象也是bb,当添加第三个对象cc时,全部就变成cc了Function GetGoodsType(ByRef vGoodsTypes As cGoodsTypes) As Boolean
    Dim vGoodsType As New cGoodsType
    Dim rst As New ADODB.Recordset
    Dim strSql As String
    Dim i As Integer
    
    strSql = "SELECT * FROM DD_GoodsType "
    rst.Open strSql, gConn, adOpenStatic, adLockReadOnly, adCmdText
    If rst.BOF And rst.EOF Then GoTo PROC_EXIT
    For i = 1 To rst.RecordCount
        With vGoodsType
            .ShortName = rst!ShortName
            .GoodsTypeID = rst!GoodsTypeID
            .GoodsTypeName = rst!GoodsTypeName
        End With
        vGoodsTypes.Add vGoodsType, ""
        rst.MoveNext
    Next i
    GetGoodsType = True
    
PROC_EXIT:
    Exit FunctionPROC_ERR:
    GetItem = False
    '* ErrHandler *********************
    GoTo PROC_EXITEnd Function

解决方案 »

  1.   

    是因为你往集合里添加的始终是同一个对象。你对他做了修改,当然是集合里的所有元素属性都变了。
    For i = 1 To rst.RecordCount
            set vGoodsType=new cGoodsType '加上这句看看
            With vGoodsType
                .ShortName = rst!ShortName
                .GoodsTypeID = rst!GoodsTypeID
                .GoodsTypeName = rst!GoodsTypeName
            End With
            vGoodsTypes.Add vGoodsType, ""
            rst.MoveNext
    Next i
      

  2.   

    能不能具体说一下,vGoodStYpes是不是数组,如果不是就会产生你说的后果
      

  3.   

    集合是什么概念呢?是不是在ADD的时候要加上个序号呢