我在网上查了很多关于RecordCount的属性使用方法的说法,发现有个大问题:
网上很多都是这样说的:
通常人们使用以下两种方法来执行SQL语句: 
Set Rs=Conn.Execute(SqlStr) 
和 
Set Rs=Server.CreateObject(“ADODB.RecordSet“) 
Rs.Open SqlStr,Conn,CursorType,LockType (RecordSet对象方法请看这里) 
由于默认的记录集游标是服务器游标, 
Rs.CursorLocation = adUseServer 
所以返回Rs.RecordCount=-1, 
应该把服务器游标改为客户端游标, 
Rs.CursorLocation = adUseClient 
Rs.Open SqlStr,Conn,CursorType,LockType rs.cursortype 光标类型 CursorType 属性 
--------------------------------------------- 
ForwardOnly 0(默认) 返回-1 
Keyset 1 正确的记录数 
Dynamic 2 -1或不正确的记录数,依数据源而定 
Static 3 正确的记录数 所以Rs.CursorType = 3 
------------------------------------------------------------我发现上面那个作者说得基本正确,但是我的一个小测试程序却说明
即使使用Rs.CursorType=adOpenDynamic也是可以正确返回记录数据的
(不用任何的Movelast,MoveFirst)
Private Sub Form_Load()
Dim Rs As New ADODB.Recordset
Rs.CursorLocation = adUseClient
Rs.Open "t1",_ 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\fhh\桌面\新建文件夹\db.mdb;Persist Security Info=False" _
, adOpenDynamic, adLockOptimistic, adCmdTable
MsgBox Rs.RecordCount
End Sub
---------------------------------------------------------------------
后来我发现:
只要我设置了CursorLocation= adUseClient
利用任何一中鼠标类型,就算是只向前鼠标,全部都可以获取所有记录数的。
而如果我设置了CursorLocation= adUseServer(默认)
则adOpenForwardOnly和 adOpenDynamic就不行了。--------------------------------------------------------大家说说看,这是怎么一回事?