ADO.RecordCount 等於 - 1 個問題
每當我嘗試訪問 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(*) 技術。