dim aaa as collectionDim bbbb As Variant
Dim sql As String
Set aaa = SelectAllField("tmptable", "tablename")MsgBox aaa.Count     '这里显示aaa里面有2条数据For Each bbbb In aaa  sql = sql & bbbb    '到这里错误信息提示 对象不再有效,事实错误440Next这是怎么回事?我把SELECTALLFIELD写在模块里面了!请问这是什么原因?

解决方案 »

  1.   

    Public Property Get NewEnum() As IUnknown
      '本属性允许用 For...Each 语法枚举该集合。
      Set NewEnum = SelectAllField.[_NewEnum]
    End Property难道要加类似于这样的属性不成?我在别的例子里面不+也可以啊?为什么这个不行?SelectAllField函数大家不用考虑!因为MsgBox aaa.Count     '这里显示aaa里面有2条数据
      

  2.   

    Dim bbbb As Variant就算改成Dim bbbb 
    一样出错
      

  3.   

    Private Sub Command1_Click()
    Dim aa As New Collection
    'Dim c As New Class1
    Dim b
    Set aa = ccIf aa.Count = 0 Then    MsgBox "aa"
        
    End IfFor Each b In aa    Print bNextEnd SubPublic Function cc() As Collection
        Dim mol As New Collection
        
        'Set mol = Nothing
        
        mol.Add "aa"
        mol.Add "bb"
        
        Set cc = molEnd Function这样是对的,放到一个工程里面可以用,但为什么上面的就错呢??????
      

  4.   

    Option ExplicitPrivate Sub Form_Load()
    Dim aaa As CollectionDim bbbb As Variant
    Dim sql As StringSet aaa = New Collection
    aaa.Add "1"
    aaa.Add "2"MsgBox aaa.Count     '这里显示aaa里面有2条数据For Each bbbb In aaa  sql = sql & bbbb    '到这里错误信息提示 对象不再有效,事实错误440NextMsgBox sql
    End Sub我运行了如上的例子,没有问题,不知道你的是怎么回事
      

  5.   

    想不通你的问题了,不过看得出你大概是想动态生成一条查询语句吧For I = 1 To aaa.Count  sql = sql & aaa(I) Next这样不行吗?
      

  6.   

    dim aaa as New Collection
      

  7.   

    aa(i)不可以,直接就说  对象不再有效,事实错误440真不明白了,我是连接的数据库,然后从数据库里面取出数据按理说程序走到
    MsgBox aaa.Count     '这里显示aaa里面有2条数据
    这一步应该可以了~真不明白~
      

  8.   

    以下代码在.NET里调试没错!    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '定义一个联接数据库的变量
            ' Dim objconn As String = "Data source=127.0.0.1;User ID=sa;Password=123;Initial Catalog =wjren"
            '创建一个数据库联接并打开的实例“SqlConnection”是与数据库相关联的一个Class
            '  Dim sqlConn As New SqlConnection(objconn)
            '打开数据库
            ' sqlConn.Open()
            Dim aaa As New Collection()        Dim bbbb As New Object()
            Dim sql As String
            sql = "select "
            aaa.Add("123")
            aaa.Add("456")
            MessageBox.Show(aaa.Count)    '这里显示aaa里面有2条数据        For Each bbbb In aaa            sql = sql & bbbb    '到这里错误信息提示 对象不再有效,事实错误440
                SelectAllField.Items.Add(sql)
            Next
        End Sub
      

  9.   

    加New Collection
    还不明白吗?
      

  10.   

    大哥和个没有关系~我程序都写到这份上了,还会出现NEW 这样的低级错误吗?dim rs as adodb.recordset
    dim rs2 as new adodb.recordsetset rs =rs2里面的RS2需要NEW,但RS还需要NEW吗!!!!!!!!NEW这个问题我不想在说了~有没有别的办法??????????????
      

  11.   

    越是高手越容易出现低级错误,因为他们不在乎
    你的代码我就加了个New就没问题了,
    为什么???
      

  12.   

    你的第一段代码我原封不动的拷出来加到工程里加个New一切OK
      

  13.   

    如果不加New的话就会报对象变量或with块未设置,实时错误‘91’
      

  14.   

    我真不骗你~不是NEW的问题~~~你现在可以连接一个数据库试试 ~~function SelectAllField(TableName as string,FieldName as string)as collection里面是连接数据库,从TABLENAME里面查询FEILDNAME,把查询出来的数据放到SELECTALLFIELD 返回来~然后再在外面调用,就会出现我说的情况~~不信你试试~end function
      

  15.   

    VB可不可以返回一个数组?.net好象就可以哦~~~我快郁闷死了~