你把游标类型和游标位置改一下应该就可以了.
用静态的客户端游标.
DBRecordset.CursorType = adOpenStatic
DBRecordset.CursorLocation = adUseClient

解决方案 »

  1.   

    使用它的recordcount属性
    要不就直接是count 属性试试吧
      

  2.   

    ADODB对不同的数据库引擎去持是不一样的.
    如果返回-1又想知道记录数那只能把记录集遍历一下了.
    如果是想判断有没有读到记录数那就这样写:
    if( rs.bof and rs.bof) then
        '记录集为空.
    else
        '记录集不为空.
    endif
      

  3.   

    刚写错了.是rs.bof and rs.eof.
      

  4.   

    哦,是不是access不支持啊
    我已经改了光标位置和类型了。
      

  5.   

    ado数据库得吧? 
    shenme yisi ?
      

  6.   

    你的数据库是什么?用什么方式连接数据库啊?
    还没碰到过recordcount属性不能用的呢,可能在你引用recordcount时还未给recordset正确赋值吧,
    要不试试movelast,再取AbsolutePosition试试?要不取book也行
      

  7.   

    我也碰到过,有人教我这么做
    RecordSet.Open 数据库名 Connection, adOpenKeyset, adLockOptimistic
    不过到现在也不知道为什么?好象和所设的游标有关!
      

  8.   

    VB处理数据库时求数据表记录总数的最佳方法 
    作者:深圳宝安原来电子有限公司 
    倪坚明 ---- ---- VB主要处理的是MDB格式的数据库,但就在这方面,它就偏偏出了差错,先看看下例: Dim db As Database
    Dim rs As Recordset
    Set db = OpenDatabase(App.Path & "\zzr.mdb")
    Set rs = db.OpenRecordset("test")
    Debug.Print rs.RecordCount---- ---- 此例假设在应用程序目录下有一个名为"zzr.mdb"的数据库,而且它里边有一个名为"test"的表,此程序的目的就是求出该表中的记录的总数。此处用到的是"表"对象的RecordCount属性,这样用在一般性况下是正确的,但并不能保证在所有的情况下都能得出正确的结果,比如说表中的数据量很大,或者是数据库受到过什么损害等等。如果碰到这种情况,我们可以换一个角度来处理。请看下面的程序: 
    Dim db As Database
    Dim rs As Recordset
    Dim Num As Long
    Set db = OpenDatabase(App.Path & "\zzr.mdb")
    Set rs = db.OpenRecordset("test")
    Num = 0
    rs.MoveFirst
    Do While Not rs.EOF()
    Num = Num + 1
    rs.MoveNext
    Loop
    Debug.Print Num---- ---- 这样,最后得到的Num即为正解结果,这种方法的思路是从表的开始处一直顺序走到结尾,就可以"数"出表中到底有多少条记录。这种方法看起来很笨,但是它却是一个相当准确的方法,大家不防可以试一下。 
    ---- 再看笔者的说法: ---- 先看上面一行程序:Debug.Print rs.RecordCount,VB5在读取数据表时并非一次性将全部记录均读入内存(想想看如果有一个表,里面有一百万个记录甚至一亿个或更多,要想全部读入内存,你的机器能承受得了吗?),只是先读入一部分(在下认为这是VB的优异这处),recordset对象并非表的全部记录,只是已读入内存的部分,故用rs.recordcount得到的不是表的记录总数。 ---- 再看上面程序的改良部份: 
    Do While Not rs.EOF()
    Num = Num + 1
    rs.MoveNext
    Loop
    Debug.Print Num---- 在下用十万个记录的表对上面这段程序做了个测试,结果花了六分半钟(intel 166,32M内存),如此的等待,阁下有耐心无?请看在下的对策: 
    ---- 假设数据表已打开,用 rs.Recordset.MoveLast '将指针移到表的最后一笔记录
    debug.print rs.Recordset.RecordCount 
    即可得出正确结果。或者用下一种方法亦可rs.Recordset.MoveLast
    debug.print rs.Recordset.AbsolutePosition+1
    '调用绝对位置,因vb的第一笔记录是由零算起,故要+1。
      

  9.   

    其实ljren_t(立志)回答的已经解决问题了。
      

  10.   

    access里 要在MoveLast之后recordcount才正确有效,为啥呢?我不知道~~
      

  11.   

    rescordcount 不可靠,可用sql语句查出符合条件的纪录数
      

  12.   

    用 select count(*)   语句获得纪录总数
      

  13.   

    使用recordset.recordcount不就行啦!然后用refresh刷新就行啦!
      

  14.   

    Form1.Data1.Recordset.RecordCount 
      

  15.   

    if not rst.eof then
      rst.movelast
      rst.movefirst
    end if
    count=rst.rowcount
      

  16.   

    zklove(花花公子)说的对,这样就绝对没问题了
      

  17.   

    MSDN>>CRecordset>>GetRecordCount>>:
    The record count is maintained as a “high water ” — the highest-numbered record yet seen as the user moves through the records. The total number of records is only known after the user has moved beyond the last record. For performance reasons, the count is not updated when you call MoveLast. To count the records yourself, call MoveNext repeatedly until IsEOF returns nonzero. Adding a record via CRecordset:AddNew and Update increases the count; deleting a record via CRecordset::Delete decreases the count. 
      

  18.   

    recordcount有时不能反映数据集的数目,所以你最好自己编一段程序来统计记录的条数
    example:
      dim a int 
      a=0
      while not recordset.eof do
        a=a+1
      最终的a的数值就是记录数
    我的语法也许有问题,但思路不错
      

  19.   

    sql=select count(*或字段) where 条件
      

  20.   

    挨个数也是没有办法的事,谁让那个RecordCount不灵呢?
      

  21.   

    用两种方法解决RecordCount不灵的问题:
    1、Set rs = db.OpenRecordset("select * from test order by lngtestid")
      关健是sql语句中用order by排序。
    2、Set rs = db.OpenRecordset("test")
       rs.movelast
       
      

  22.   

    不是RecordCount不灵。。
    我记得RecordCount返回的好像是移动过的记录数
      

  23.   

    用RecordCount必须移动大最后位置,不如用楼上的SQL语句,那样最好
      

  24.   

       先看一下你打的记录集是否可以查看记录条数或记录是否可以上、下、最上、最下的移动,如果不行那就说明你的游标没有设。你只要如下:Recordset.CursorLocation = adUseClient  Recordset.CursorType = adOpenStatic 就OK了。
     
      

  25.   

    首先,游标要设好
    如:用静态的客户端游标.
    Recordset.CursorType = adOpenStatic
    Recordset.CursorLocation = adUseClient 第二,移动指针到最后一条
    rs.Recordset.MoveLast '将指针移到表的最后一笔记录,确保得到正确的结果
    debug.print rs.Recordset.RecordCount 有人问为什么要移动指针到最后一条?
    因为,用recordset访问到的是一个内存中的备份,不是所有的该纪录集的数目
    这时得到的数量是recordset在内存部分的纪录数
    使用movelast后,就能得到该纪录集中的所有记录数
      

  26.   

     to find result from msdn
    care the cursor loctionthere many gays give u a wrong way