使用ADO访问SQL SERVER2000的取得记录总数问题pubakRS.CreateInstance(_uuidof(Recordset));
try{
pubakRS->Open("select * from MSUPTableX_BAK",
       pConn.GetInterfacePtr(),
   adOpenDynamic,
   adLockOptimistic,
   adCmdText);
}catch{....}
pubakRS已经调用open
调用pubakRS->addnew(),movenext(),也很正常
但就是无法取得当前位置,和记录总数
int i = pubakRS->AbsolutePosition;
    i = pubakRS->RecordCount;
跟踪了一下i的值,老是为-1,请教一下大家是怎么一会事,初次使用ADO,问得难免有点瓜吧,请大家不要见笑

解决方案 »

  1.   

    RecordCount属性用来确定Recordset中有多少条记录,如果提供程序或临时表不支持书签,则RecordCount属性将返回-1。也可以通过调用Recordset对象中的Supports方法并使用adBooks常量,以确定提供程序是否支持该功能,以便Recordset可以返回有效的RecordCount值。在Recordset关闭时检查该属性,则将产生一个运行时错误。你可以使用基于静态或键集的临时表,则RecordCount可以返回一个正确的值。
      

  2.   

    还是没怎么明白,能说具体点吗,最好能放上代码之类的,谢谢
    怎样使用基于静态或键集的临时表,使RecordCount可以返回一个正确的值?
      

  3.   

    在m_pSet->Open()前加上:
    m_pSet->CursorType = adOpenStatic;
    m_pSet->CursorLocation = adUseClient;具体的分析原因参考
    http://blog.csdn.net/laiyiling/archive/2005/04/29/367711.aspx
      

  4.   

    SELECT COUNT(*) FROM yourTableName
      

  5.   

    一般来说,取得记录集总数可以用存储过程完美实现 SQL 中 :
    create proc
    p_query(
    @sqlstring varchar(1024)
    )
    as
    exec('select * from ( ' +  @sqlstring  + ') a ')
    exec('select count(0) from ( ' +  @sqlstring  + ') a ')go这样会返回两个记录集,第一个是数据,第二个只有一行一列,是数据条数
    set rs=conn.execute(sql)返回第二条记录集
    set rs2=rs.nextrecordset
    count=rs2(0)
      

  6.   

    说明:以上是vbs代码,VC中请参照修改
      

  7.   

    因為是用的adOpenDynamic,動態連接,當然不能確定數據記錄數和位置,就該改為adOpenStatic.靜態連接才行.
      

  8.   

    SELECT COUNT(*) FROM yourTableName
    我第一次也是用的上面的方法来判断的记录数的,但要多查询了一次数据库挺麻烦的,代码也显得很繁琐,改用在open前使用,就好多了,已搞定了
    m_pSet->CursorType = adOpenStatic;
    m_pSet->CursorLocation = adUseClient;
    3Q,各位