当我尝试访问RecordCount属性时,我总是得到-1的返回值。以下是我的示例代码。
Set oConn = Server.CreateObject ("ADODB.Connection")
oConn.Open Application("strConnectstring")
Set rs = Server.CreateObject ("ADODB.Recordset")
rs.ActiveConnection = oConn
SQL = "Publications_PicoSearchListing"
set rs = oConn.execute(SQL)
我不确定我是在做forwardCursor还是动态游标,或者提供者是否支持RecordCount属性。如何检查提供程序是否支持RecordCount属性,或者我是否使用forwardCursor或动态游标。
任何帮助都将不胜感激。
谢谢
答案 0 :(得分:4)
默认的只进游标不支持Recordcount。 你必须在open命令中添加额外的参数
rs.open sql,conn,1,1
这应该让你有权访问rs.recordcount。
但最好使用Recordset.GetRows()+ Recordset.Move()方法进行分页。
http://databases.aspfaq.com/database/how-do-i-page-through-a-recordset.html (向下滚动到粗体“Recordset.GetRows()+ Recordset.Move()”这是不使用存储过程的最快方法)
答案 1 :(得分:3)
请注意:除非您移动到记录集的末尾,否则无法保证RecordCount已被填充。使用While Not rs.EOF
迭代记录集中每一行的标准模式。在我写过的所有VBA代码中,我从未依赖于检查rs.RecordCount
您可以设置它,而不是检查光标类型。例如:
Set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("northwind.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
sql="SELECT * FROM Customers"
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
rs.Open sql, conn
如果您想要的只是计数,为什么不发出“SELECT Count(*)From Publications_PicoSearchListing”
感兴趣?:Understanding ADO's Default Cursor Type
获取RecordCount的另一种方法是执行:
rs.MoveLast
rs.MoveFirst
然后检查RecordCount,即便如此我似乎还记得一些游标类型不能保证(但内存模糊不清)。
另请注意:除非您确实需要,否则不要使用MoveLast / MoveFirst:对于大型记录集或通过网络绘制的记录集,这将会很慢。而是使用Count(*)技术。
答案 2 :(得分:3)
对于传呼,您可以使用recordset.PageSize
和recordset.AbsolutePage
这样的
Set rs = Server.CreateObject("ADODB.Recordset")
' make recordset use adUSEclient ( client side cursor)'
rs.CursorLocation = 3
' make recordset use the adOpenStatic cursor ( scrollable )'
rs.CursorType = 3
rs.PageSize = RecordsPerPage
rs.Open sql, conn
' go to selected page'
if not rs.EOF and not rs.BOF then
rs.AbsolutePage = page_you_want_to_go
end if
然后您可以访问recordset.PageCount
以了解返回的页数..