这段程序
   Dim mrc As ADODB.Recordset    
   dim txtSQL as string............  txtSQL = "select * from Test_Infor  group by Test_Chap " 
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    If Not mrc.BOF Then
     mrc.MoveFirst
     End If
    .....
每次运行运行,都显示对象变量或with块变量未设置
选择调试后,"If Not mrc.BOF Then"显示黄色
去掉"group by Test_Chap "后程序正常
注:Test_Chap 为String,对应数据库中的一个字段
我怀疑该错误是由于没有找到任何记录引起的,但就是不知道怎么改!

解决方案 »

  1.   

    If not mrc is nothing then
       If Not mrc.BOF Then
          mrc.MoveFirst
       End If
    end if
      

  2.   


        If Not mrc.BOF And Not mrc.EOF Then
      

  3.   

    ExecuteSQL是什么东西?你把代码贴全了,这样看不出来。
      

  4.   

    Obsolete Features in DAO
          Microsoft Access versions 1.x and 2.0 and Microsoft Visual Basic version 3.0 used earlier versions of DAO. Several objects, methods, properties, and statements in those earlier versions are considered "obsolete" but are still supported for backwards compatibility with existing user code.The following is a list of DAO methods, properties, objects, and statements that have been replaced by more powerful, flexible, and easy-to-use features. Each obsolete feature in the list has a corresponding replacement feature.
    |------------------------------|-----------------------|
    | Obsolete feature             |  Replacement feature  |
    |------------------------------|-----------------------|
    |Database.ExecuteSQL method    |   Execute method      |
    |______________________________|_______________________|由此可见,ExecuteSQL 只是为了向前兼容(supported for backwards compatibility )而保留的,但从 Dim mrc As ADODB.Recordset  分析可知,目前的版本是高级ADO版本,有可能是早期的 ExecuteSQL 不支持 Group By 关键字所引起的吧!
    Set mrc =dbSample.ExecuteSQL(txtSQL, MsgText) (我加了个 dbSample),返回Nothing ,使用 mrc.BOF 将引起错误(因为 mrc “对象变量未设置”)
      

  5.   

    高山流水,你知道怎样才能实现 "group by"这一功能吗?
      

  6.   

    不看你的ExecuteSQL代码怎么行啊?不管adodb的connection或是dao的database都没有ExecuteSQL这个方法。
      

  7.   

    一般来说你在select后有几个字段,则group by 后也要同个字段
    (使用了数学函数的字段除外)
      

  8.   

    Dim mrc As ADODB.Recordset    
       dim txtSQL as string............  txtSQL = "select * from Test_Infor  group by Test_Chap " 
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        If mrc.BOF and mrc.eof Then
           msgbox "没有找到相关记录!!!"
      else
          mrc.MoveFirst
       End If
      

  9.   

    Set mrc = ExecuteSQL(txtSQL, MsgText)
    错误~
      

  10.   

    我猜是你有其他的数据库空间没有定义好把诸如DATA之类的我前几天做VB程序的时候就是这个问题你找找看
      

  11.   

    txtSQL = "select * from Test_Infor  group by Test_Chap " 
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        If mrc.BOF and mrc.eof Then
           msgbox "没有找到相关记录!!!"
      else
          mrc.MoveFirst
       End If1。你的查询语句有问题,没有聚合函数为什么用GROUP BY?
    2。你监视一下EXECUTESQL是否返回了一个RECORDSET对象?即MRC是否为NOTHING ?如果为NOTHING ,当然后面会出错。
      

  12.   

    with mrc
       .------
       设置参数
       .------end with
      

  13.   

    ExecuteSQL有毛病,要不就是没有记录
      

  14.   

    在你的gruop by 后面的字段是Test_Chap 那么在你select 后面只能有这一个字段.
      

  15.   

    同意leftTie,"Test_Infor"表中共有几列?如查用GROUP BY,那么被SELECT的字段要么包含在GROUP BY 中,要么必须与一个SQL函数结合在一起.估计是是SQL语义上的问题,你可以在SQL2000环境或"查询分析中"验证一下该语句是否正确,然后再在VB中引用之.
      

  16.   

    同意leftTie,"Test_Infor"表中共有几列?如使用GROUP BY,那么被SELECT的字段要么包含在GROUP BY 中,要么必须与一个SQL函数结合在一起.估计是是SQL语义上的问题,你可以在SQL的数据库环境中(SQL SERVER自带的视图设计环境)或"查询分析器中"验证一下该语句是否正确,然后再在VB中引用之.
      

  17.   

    多半是ExecuteSQL(txtSQL, MsgText)没有返回记录集。
      

  18.   

    txtSQL = "select * from Test_Infor  group by Test_Chap " 
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        If Not isNULL(Test_Chap) Then
         mrc.MoveFirst
         End If
      

  19.   

    唉!
    那么多人都误人子弟!
    不懂就不要乱回贴,只有一两个人说到问题的重点。
    重点是:SQL语句出错,
    用group by必须在select中写明该字段,前后都得有。
    看一下SQL2000  的联机丛书
    唉!可悲可叹!