用記錄集鎖定可以鎖定Recordset對象基本表,也可以指定只讀或(和)只寫訪問。記錄集鎖定只能應用於表類型和動態集類型的Recordset對象,頁面鎖定(見下一節)不能應用於快照類型和僅向前類型的Recordset對象,因為它們本來就是只讀對象。盡管如此,MicrosoftJet仍提供了共享表讀鎖定和共享表寫鎖定。
(1).打開記錄集。以共享模式打開數據庫之後,可以通過在OpenRecordset方法的oPtions參數中指定不同的選項來實現記錄集鎖定。為了用鎖定打開一個記錄集,可按如下步驟操作:1.)以共享模式打開Recordset對象的數據庫。2.)用OpenRecordset方法打開記錄集,並把Options參數設置為所需要的鎖定方式。3.)當Recordset對象的使用結束時,關閉該對象以釋放所有記錄集級的鎖定。編寫一個Function過程,以獨占方式打開一個表。
FunctionOpenTableExclusive(dbsAsDatabase,rstAsRecordset,strTableAsString)AsInteger
Setrst=dbs.OpenRecordset(strTable,dbOpenTable,dbDenyRead dbDenyWrite)
SelectCaseErr
CaSe0:
OpenTableExclusive=0
CaSeElse:
OpenTableExclusive=-1
EndSelect
Err=0
EndFunction
該過程通過dbDenyWrite和dbDenyRead選項常數的組合,以獨占模式打開一個表。如果過程調用成功(返回0),則在Recordset變量被顯式或隱式地關閉之前,其它用戶將不能訪問該表。如果其它用戶已經以獨占模式打開該表,或者發生了一個非預期的錯誤,則該過程返回-1。為了調用上述過程,可以在窗體上畫一個命令按鈕,然後編寫如下的事件過程:
PrivateSubCommand1_Click()
DimaAsInteger
DimMvDbsAsDatabase
DimMvTabsAsRecordset
SetMyDbs=OpenDatabase("C:dbdirdbl.mdb,true)
a=OpenTableExclusive(MyDbs,MyTabs,"Tabel1")
SelectCasea
Case0:
MsgBox"調用成功"
CaseElse:
MsgBox"調用出錯"
EndSelect
EndSub
注意,如果打開一個Recordset對象時沒有指定option:參數值,則MicrosoftJet將使用頁面鎖定。在這種情況下,將以共享模式打開記錄集,並且不禁止其他用戶訪問記錄集中的數據,但它確實鎖定了當前頁中正在編輯的數據。
(2).在打開記錄集時檢查錯誤。和以獨占模式打開數據庫一樣,當對Recordset對象設置鎖定時,如果鎖定失敗,則會產生錯誤。如果某個用戶以禁止其它用戶獲得鎖定的方式打開了一個Recordset對象,則當試圖鎖定該Recordset對象時將會發生最常見的錯誤,即3262,其出錯信息為:“不能鎖定表XXX;當前正被用戶XXX在機器XXX上使用。”。當試圖對不能鎖定的對象使用OpenRecordset方法時,也會產生這個錯誤。->