2010-01-08 101 views
7

當我嘗試訪問RecordCount屬性時,總是得到-1的返回值。以下是我的示例代碼。ADO.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或動態遊標。

任何幫助,將不勝感激。

謝謝

回答

3

用於分頁可以使用recordset.PageSizerecordset.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知道的頁數返回..

+0

這是否讀取高達您請求的頁面中的所有記錄?因爲你是使用記錄與爲adUseClient爲的CursorLocation。 – Edelcom 2010-01-09 10:05:40

+0

實際上它讀取符合SQL查詢中的所有記錄..但將當前記錄在基於頁面大小和absolutepage你想要一個點.. 還沒有找到一種方法只返回你想要的數據,允許記錄被斷開,也保持字段名.. – 2010-01-09 15:15:34

3

請注意:除非你移動到記錄的到底有沒有保證的總記錄將被填充。使用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

另一種方法來獲取總記錄是執行:

rs.MoveLast 
rs.MoveFirst 

然後檢查RecordCount,甚至然後我似乎記得一些光標類型不保證(但米埃默裏對此朦朧)。

另請注意:除非您確實需要,否則請勿使用MoveLast/MoveFirst:在網絡中繪製大型記錄集或記錄集時,速度會很慢。而是使用Count(*)技術。

+0

爲什麼我需要使用的RecordCount是因爲我實現尋呼解決方案的原因。 – 2010-01-08 13:21:01

+0

不要使用rs.MoveLast和rs.MoveFirst,這可能會導致非常糟糕的性能。使用select count(*)解決方案來了解您正在處理的記錄數量。 – Edelcom 2010-01-08 18:29:25

4

Recordcount不支持默認的只進遊標。 必須添加額外的參數,以打開命令

rs.open SQL,康涅狄格州,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

你,先生,是一個嚇壞的Visual Basic天才要比 – BrainO2 2014-07-22 23:40:18