我在网上查了很多关于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就不行了。--------------------------------------------------------大家说说看,这是怎么一回事?
网上很多都是这样说的:
通常人们使用以下两种方法来执行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就不行了。--------------------------------------------------------大家说说看,这是怎么一回事?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货