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