利用ADO連接數據庫時,Rs.recordcount總是返回-1,解決辦法如下:
就是在記錄集打開前加上Rs.cursorlocation=3
以下附此案例的相關資料(轉):
因為conn后第一個數字是1表示指針只能往前,3表示自由指針
使用RecordCount屬性可確定Recordset對像中記錄的數目。ADO無法確定記錄數時,或者如果提供者或游標類型不支持RecordCount,則該屬性返回–1。讀已關閉的Recordset上的RecordCount屬性將產生錯誤。
如果Recordset對像支持近似定位或書簽(即Supports(adApproxPosition)或Supports(adBookmark)各自返回True),不管是否完全填充該值,該值將為Recordset中記錄的精確數目。如果Recordset對像不支持近似定位,該屬性可能由于必須對所有記錄進行檢索和計數以返回精確RecordCount值而嚴重消耗資源。
Recordset對象的游標類型會影響是否能夠確定記錄的數目。對僅向前游標,RecordCount屬性將返回-1,對靜態或鍵集游標返回實際計數,對動態游標取決于數據源返回-1或實際計數。
-------------------------------------------------------------------------------------------------------------------------------
rs.CursorLocation=3 是什么意思
3 就是rs.CursorLocation = adUseClient
就是代表使用客戶端光標,和他對應的是 rs.CursorLocation = adUseServer 服務端光標
---------------------------
看一下,比我解釋的清楚
CursorLocation 屬性
設置或返回游標服務的位置。
設置和返回值
設置或返回可設置為以下某個常量的長整型值。
常量 說明
adUseNone 沒有使用游標服務。(該常量已過時并且只為了向后兼容才出現)。
adUseClient 使用由本地游標庫提供的客戶端游標。本地游標服務通常允許使用的許多功能可能是驅動程序提供的游標無法使用的,因此使用該設置對于那些將要啟用的功能是有好處的。AdUseClient 具有向后兼容性,也支持同義的 adUseClientBatch。
adUseServer 默認值。使用數據提供者的或驅動程序提供的游標。這些游標有時非常靈活,對于其他用戶對數據源所作的更改具有額外的敏感性。但是,Microsoft Client Cursor Provider(如已斷開關聯的記錄集)的某些功能無法由服務器端游標模擬,通過該設置將無法使用這些功能。
說明
該屬性允許在可用于提供者的各種游標庫中進行選擇。通常,可以選擇使用客戶端游標庫或位于服務器上的某個游標庫。
該屬性設置僅對屬性已經設置后才建立的連接有影響。更改 CursorLocation 屬性不會影響現有的連接。
對于 Connection 或關閉的 Recordset 該屬性為讀/寫,而對打開的 Recordset 該屬性為只讀。
由 Execute 方法返回的游標繼承該設置。Recordset 將自動從與之關聯的連接中繼承該設置。
遠程數據服務用法 當用于客戶端 (ADOR) Recordset 或 Connection 對像時,只能將 CursorLocation 屬性設置為 adUseClient。