Asp-Classic

ADO.RecordCount 等於 - 1 個問題

  • January 9, 2010

每當我嘗試訪問 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 或動態游標。

任何幫助,將不勝感激。

謝謝你

預設的只進游標不支持 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()”這是最快的方法不使用儲存過程)

請注意:除非您移動到記錄集的末尾,否則無法保證 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”

感興趣?:了解 ADO 的預設游標類型

獲取 RecordCount 的另一種方法是執行:

rs.MoveLast
rs.MoveFirst

然後檢查RecordCount,即使那樣我似乎還記得某些游標類型不能保證(但對此記憶模糊)。

另請注意:除非您確實需要,否則不要使用 MoveLast/MoveFirst:對於大型記錄集或跨網路繪製的記錄集,這會很慢。而是使用 Count(*) 技術。

引用自:https://stackoverflow.com/questions/2024900