将数据库连接改为客户端游标:
conn.CursorLocation = adUseClient

解决方案 »

  1.   

    为何要这样,adUseServer为何不行?
      

  2.   

    是这样的:微软的开发者假定缺省的情况是客户机从服务器上进行查询的。为了降低网络开销,打开一个记录集时,并不从服务器上将这个查询的全部记录传到客户机。这在记录集非常大时很有必要。基于此,打开查询也未必得到记录数,除非记录集很小。解决的方法:
    1 使用下列语句:rs.MoveLast
    rs.MoveFirst由于已经遍历了记录集,可以得到记录数。2 使用客户端游标,也就是将记录集缓存开在客户端。这样做的代价是,如果你真的是在局域网或互联网上查询,前期的网络开销较大。之后,如果没有访问到未传输的数据部分,则可以快速从本地得到数据。这种情况下,当然也可以获得记录数。3 使用需要预先遍历的查询语句,例如有 Order By 或者 Group By 的查询。由于查询过程已经遍历了记录集,因而可以得到记录数。