为什么
rs.Open "select * from employees", CN, adOpenDynamic, adLockBatchOptimistic
?rs.RecordCount  返回 9
但是:
Set rs = CN.Execute("select lastname  from employees")
?rs.RecordCount  返回 -1,也可以返回9吗?

解决方案 »

  1.   

    Set rs = CN.Execute("select lastname  from employees")
    返回的 Recordset 对象始终为只读、仅向前的游标。试试改成下面的看看
    Set rs = CN.Execute("select lastname  from employees",,adCmdTable)
      

  2.   

    rs1.Open "select * from employees", cn, adOpenStatic, adLockReadOnly
    '记录集类型一定要用 adOpenStatic 类型,否则返回就是-1,大多数的数据库都是这样,不过有的数据库例外,比如:SYBASE
      

  3.   

    1、 AdOpenForwardOnly (默认值)一次只能向前移动一行。
    2、 AdOpenKeyset 打开键集类型游标。
    3、 AdOpenDynamic 打开动态类型游标
    4、 AdOpenStatic 打开静态类型游标。
    AdOpenForwardOnly和AdOpenStatic这两种游标使得记录集只读,它表示创建数据的一个快照。后者比前者灵活,因为它可以允许任意方向移动。
    AdOpenKeyset允许任意移动,并且允许更改记录集。其他用户对记录集的添加和删除,这个游标反映不出来。但它能反映出其他用户对记录集的更改。
    AdOpenDynamic允许所有操作,其他用户对记录集的添加、删除、更改在此记录集中
    都是可见的。
    AdLockReadOnly (默认值)只读 --- 不能改变数据。
    AdLockPessimistic 悲观锁(逐个)--- 为确保成功完成编辑记录所需的工作,
    在编辑时立即锁定数据源的记录。
    AdLockOptimistic 乐观锁(逐个)--- 只在调用Update 方法时才锁定记录。
    AdLockBatchOptimistic 乐观批更新---用于批更新模式(与立即更新模式相对)
      

  4.   

    RecordCount 属性(from ADO210.chm)返回长整型值。使用 RecordCount 属性可确定 Recordset 对象中记录的数目。ADO 无法确定记录数时,或者如果提供者或游标类型不支持 RecordCount,则该属性返回 –1。读已关闭的 Recordset 上的 RecordCount 属性将产生错误。如果 Recordset 对象支持近似定位或书签(即 Supports (adApproxPosition) 或 Supports (adBook) 各自返回 True),不管是否完全填充该值,该值将为 Recordset 中记录的精确数目。如果 Recordset 对象不支持近似定位,该属性可能由于必须对所有记录进行检索和计数以返回精确 RecordCount 值而严重消耗资源。Recordset 对象的游标类型会影响是否能够确定记录的数目。对仅向前游标,RecordCount 属性将返回 -1,对静态或键集游标返回实际计数,对动态游标取决于数据源返回 -1 或实际计数。