剛接觸ado時,沒有感覺到遊標有什麼作用,所以沒有怎麼關注它,但是做學生管理系統時遇到了一個問題就是我使用recordset標籤屬性Bookmark總是會彈出:
花了一會時間終於找到了解決辦法:
打開記錄集的時候就會涉及到遊標
例如:
dim Rs as ADODB. Recordset
dim cnn as ADODB.Connection
rs.open trim$(SQL),cnn,adopenkeyset,odlockoptimic
後面在定義一下cursorlocation屬性
例:rs.cursorlocation=aduseclient
然後就能用了,這是因爲如果不定義,一般默認的是aduseserver,無法實現該功能,是因爲我的數據庫sqlserver2000的問題!因爲我使用sqlserver2008可以直接使用,不用申明cursorlocation
下面就總結了一下在結果集使用遊標
一.作用:
1.控制記錄定位
2.控制其他用戶對數據庫所作的更改的可視性
3.控制數據可更新性
二.
1.cursorlocation 遊標位置
類型
作用
adUseNone
沒有使用遊標服務。(該常量已過時並且只爲了向後兼容纔出現)
adUseServer 默認值
使用數據提供者的或驅動程序提供的遊標。這些遊標有時非常靈活,對於其他用戶對數據源所作的更改具有額外的敏感性。但是,Microsoft Client Cursor Provider(如已斷開關聯的記錄集)的某些功能無法由服務器端遊標模擬,通過該設置將無法使用這些功能
adUseClient
使用由本地遊標庫提供的客戶端遊標。本地遊標服務通常允許使用的許多功能可能是驅動程序提供的遊標無法使用的,因此使用該設置對於那些將要啓用的功能是有好處的。AdUseClient 具有向後兼容性,也支持同義的
注:一般我們沒有定義時,使用的都是默認值,有時都會遇到問題-有些功能無法使用,所以我們要注意了.
2.cursortype 遊標類型
遊標類型就涉及到recordset的open方法了.
recordset.open source,activeconnection,cursorType,lockType
source:指定command的對象變量名,sql語句,表名,存儲過程調用
activeConnection:connection變量名,或字符串,包含connectionString參數
cursorType(遊標類型):
類型
作用
adOpenForwardOnly(=0)
只讀,且當前數據記錄只能向下移動
不支持分頁、BookMark
adOpenStatic(=3)
可讀寫,當前數據記錄可自由移動,可看到新增記錄
adOpenKeySet(=1)
只讀,當前數據記錄可自由移動
adOpenDynamic(=2)
可讀寫,當前數據記錄可自由移動
lockType(鎖類型)
類型
作用
adLockReadOnly(=1)
缺省鎖定類型,記錄集是隻讀的,不能修改記錄
adLockPessimistic(=2
悲觀鎖定,當修改記錄時,數據提供者將嘗試鎖定記錄以確保成功地編輯記錄。只要編輯一開始,則立即鎖住記錄。
adLockOptimistic(=3)
樂觀鎖定,直到用Update方法提交更新記錄時才鎖定記錄
adLockBatchOptimistic(=4)
批量樂觀鎖定,允許修改多個記錄,只有調用UpdateBatch方法後才鎖定記錄。
注:
當不需要改動任何記錄時,應該使用只讀的記錄集,這樣提供者不用做任何檢測。對於一般的使用,樂觀的鎖定可能是最好的選擇, 因爲記錄只被鎖定一小段時間,數據在這段時間被更新。這減少了資源的使用。
遊標的功能和運用還有很多知識,自己只懂了這麼一點,應該還有待於繼續去學習!!