Sql中游標和加鎖的問題 (轉)

worldblog發表於2007-12-04
Sql中游標和加鎖的問題 (轉)[@more@]

 

'遊標型別
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'加鎖型別
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
>%

%
%
%
%
遊標使用時是比較靈活的,它有時用來描述一個記錄集,有時又是用來描述當前記錄集
中某一條記錄的指標。遊標主要是用來建立一個關係中行/列關係的一種SQL可利
用的訪問格式。與遊標有關係的技術術語還有一個叫Bookmark的。如果你選擇的遊標方式
支援Bookmarks。資料庫將提供有關記錄數目的強大功能。
在上面寫出的那麼多遊標方式中,adOpenDynamic是沒有太的用處的,雖然它提供實時顯示
資料庫中的記錄的所有操作的功能,但是因為並不是所有的資料庫都支援該遊標方式,
沒有移植性的遊標方式對當前錯綜複雜的資料庫來說真是用處不大。
在實際的中,我相信大家使用得最頻繁的是adOpenStatic方式,當然這種方式的缺點是
不能夠就、實時反應出資料庫中內容改變時的狀況。如果要想看到資料庫被其它改變的
狀況,可使用adOpenKeyse方式(但是它只能夠反應出被編輯的改變情況,也就是說不能夠
反映出新增和刪除記錄的改變情況。)
其實上面的內容大家一般都可以在的技術參考資料中找到,下面來說說在使用這些遊標
方式和加鎖方式時要注意到的問題。
1。首先要注意到的是這兩種方式在混合使用時的問題,就是說你同時設定遊標方式和加鎖方式。
除非你是在使用Access資料庫,一般而言當你混合使用時是並不能夠得到你預期想要的
遊標方式和加鎖方式的。例如,如果你同時將遊標設定為adOpenStatic方式,而將加鎖設定為
adLockOptimistic,你將得不到adOpenStatic方式的遊標,你這時使用的遊標方式將是
adOpenKeyset,也就是說你使用ADO的話,它將返回adOpenKeyset的遊標。
2。其次,遊標和加鎖的混合使用還會導致ADO返回的不是你想要的加鎖方式,ADO會改變你的加鎖
方式。例如,在預設狀態下游標方式是adOpenForwardOnly,在使用這種遊標方式的同時如果
你使用的加鎖方式為-1(就是讓資料來源來判斷加鎖方式)或則adLockReadOnly,那麼這種混合方式
基本上不支援RecordSet的任何方法,也就是說RecordSet的任何方法將返回False
(你的recordcount,absoultpage,addnew,delete,update等都會返回-1,-1就是表示不支援該屬性),
但是這時如果你使用的是adOpenForwardOnly遊標方式和其它的加鎖方式混合,它反而
會支援填加,刪除和更新。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988219/,如需轉載,請註明出處,否則將追究法律責任。

相關文章