我的一条关于数据库多表查询的sql语句,在数据库管理系统的query中执行成功,而同样的语句放在vb程序中,却返回空记录集,程序如下:
dim cnn as new adodb.connection
假定此cnn对象已正确打开,即正确连接数据库
dim rs as new adodb.recordset
dim strsql as string 
'假定此strsql字符串即是在数据库管理系统中正确执行的sql语句
set rs=cnn.execute(strsql)
执行完此语句后,rs对象的EOF或BOF属性总是True,即没有满足条件的记录集,但事实上是有的。注:该sql语句特点:多表连接,用了count(*),group by,order by字句;
当该sql语句变为简单语句如:“select * from Table_naem"时,不存在上面的问题我的Sql语句为:
select a.ClassID,a.ClassName,count(*) from a,b,c where c.SchoolsiteID=2 and b.SiteID=c.SiteID and b.
ClassID=a.ClassID group by a.ClassID order by a.ClassID
期中a,b,c为表名。 

解决方案 »

  1.   

    建议将Recordset的CursorLocation属性设置为 adUseClient.
    在SQL Server Query里执行有没有记录?
      

  2.   

    在mysql query里执行有记录。
      

  3.   

    我将Recordset的CursorLacation属性设置为adUserClient也不行。
      

  4.   

    据说sql标准语法中,group by 后出现的字段也必须在count(*)之前以同样顺序出现,而且一个都不能少,我以这样的做法改写以上程序后,仍然不行。不知大家有没有人碰到这样的问题,有没有解决办法。
      

  5.   

    to coo(25):
    怎么精简sqlstring?
      

  6.   

    我也在编写vb+ado+linux(mysql)
     请问大家哪mysql的windowsODBC驱动! 我不怎么会! 请大家帮我!
      

  7.   

    不知道你是不是想要得到每一對CLASSID和CLASSNAME的個數,像你說的SELECT的項目必須要在GROUP BY 内。
      

  8.   

    从我遇到的问题来看,好像在ado中不支持count(*) 和group by 同时出现在一条语句中。
      

  9.   

    select a.ClassID,a.ClassName,count(*) from a,b,c where c.SchoolsiteID=2 and b.SiteID=c.SiteID and b.
    ClassID=a.ClassID group by a.ClassID order by a.ClassID在group by a.ClassID order by 的a.ClassID 后面改为a.ClassID,a.ClassName试试
      

  10.   

    大家在用vb和ado访问数据库时,在count(*) 和group by共用的语句中没有出现过同类问题吗?如果出现,是怎么解决的?
      

  11.   

    建议修改 1.group by 为: group by a.ClassID,a.ClassName2.count(*) 为:count(a.*)试试。