Private Sub Command1_Click()
Dim str As String
constr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=work;Data Source=MAXTONE"
str = "select * from 城市站编码 "
Dim db As New ADODB.Connection
Dim dbrs As New ADODB.Recordset
Dim dbrs2 As New ADODB.Recordset
db.Open constr, "sa", ""
dbrs.Open str, db, adOpenDynamic, adLockOptimistic
Do While Not dbrs.EOF
tmp = dbrs!城市站编码
    str2 = "select * from 结果 where 区域代码='" & tmp & "'"
    dbrs2.Open str2, db, adOpenForwardOnly, adLockOptimistic
    rs_count = dbrs2.RecordCount--------------------------这里总是返回-1
    dbrs2.Closedbrs!企业统计 = rs_count
dbrs.Update
dbrs.MoveNext
Loop
End Sub
我试用一个值去测试
tmp = "440300"(这个值是dbrs!城市站编码中的一个值)
rs_count 依然为-1但我通过sql查询分析器执行select * from 结果 where 区域代码='440300'这条查询命令时是有记录的,请问这是怎么回事?

解决方案 »

  1.   

    d dbrs2.Open str2, db, 3, 3
    指定了锁定方式和游标类型就好了
      

  2.   

    呵,解决了,改为dbrs2.open str2,db,3,1或1,1就行了,但我还是不明白为什么要这样设置,请各位指教
      

  3.   

    因为RECORDCOUNT属性在你用前向游标打开记录集时不会返回记录数,在ADO帮助文档里有详细说明的。
      

  4.   

    游标问题。
    就是这句有问题:dbrs2.Open str2, db, adOpenForwardOnly, adLockOptimistic
    改为            dbrs2.open str2,db,3,1  即可.以上是关于游标和锁定的一些说明。应该有所帮助
    ==========================================================================
    设置或返回以下某个 CursorTypeEnum 值。常量 说明 
    AdOpenForwardOnly 仅向前游标,默认值。除了只能在记录中向前滚动外,与静态游标相同。当只需要在记录集中单向移动时,使用它可提高性能。 
    AdOpenKeyset 键集游标。尽管从您的记录集不能访问其他用户删除的记录,但除无法查看其他用户添加的记录外,键集游标与动态游标相似。仍然可以看见其他用户更改的数据。 
    AdOpenDynamic 动态游标。可以看见其他用户所作的添加、更改和删除。允许在记录集中进行所有类型的移动,但不包括提供者不支持的书签操作。 
    AdOpenStatic 静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所作的添加、更改或删除不可见。 
    说明使用 CursorType 属性可指定打开 Recordset 对象时应该使用的游标类型。Recordset 关闭时 CursorType 属性为读/写,而 Recordset 打开时该属性为只读。如果将 CursorLocation 属性设置为 adUseClient 则只支持 adUseStatic 的设置。如果设置了不支持的值,不会导致错误,将使用最接近支持的 CursorType。如果提供者不支持所请求的游标类型,提供者可能会返回其他游标类型。打开 Recordset 对象时,将更改 CursorType 属性使之与实际使用的游标匹配。要验证返回游标的指定功能,请使用 Supports 方法。关闭 Recordset 后,CursorType 属性将恢复为最初的设置。下表说明每个游标类型所需的提供者功能(由 Supports 方法常量标识)。 对于该 CursorType 的某Recordset  对于所有这些常量, Supports 方法必须返回 True 
    AdOpenForwardOnly 无 
    AdOpenKeyset AdBook、adHoldRecords、adMovePrevious、adResync 
    AdOpenDynamic adMovePrevious 
    AdOpenStatic adBook, adHoldRecords, adMovePrevious, adResync 
    注意   尽管对于动态游标和仅向前游标 Supports(adUpdateBatch) 可能是真,但对于批处理更新应使用键集游标或静态游标。请将 LockType 属性设置为 adLockBatchOptimistic,然后将 CursorLocation 属性设置为 adUseClient 以启用批更新需要的 OLE DB 游标服务。远程数据服务用法   当用于客户端 (ADOR) Recordset 对象时,只能将 CursorType 属性设置为 adOpenStatic。