top
Loading...
多客戶環境下VB數據庫編程之(4)

記錄集鎖定

用記錄集鎖定可以鎖定Recordset對象基本表,也可以指定只讀或(和)只寫訪問。記錄集鎖定只能應用于表類型和動態集類型的Recordset對象,頁面鎖定(見下一節)不能應用于快照類型和僅向前類型的Recordset對象,因為它們本來就是只讀對象。盡管如此,Microsoft Jet仍提供了共享表讀鎖定和共享表寫鎖定。

(1).打開記錄集。以共享模式打開數據庫之后,可以通過在OpenRecordset方法的oPtions參數中指定不同的選項來實現記錄集鎖定。為了用鎖定打開一個記錄集,可按如下步驟操作:1.)以共享模式打開Recordset對象的數據庫。2.)用OpenRecordset方法打開記錄集,并把Options參數設置為所需要的鎖定方式。3.)當Recordset對象的使用結束時,關閉該對象以釋放所有記錄集級的鎖定。編寫一個Function過程,以獨占方式打開一個表。

Function OpenTableExclusive(dbs As Database,rst As Recordset,strTable As String) As Integer

Set rst=dbs.OpenRecordset(strTable,dbOpenTable,dbDenyRead + dbDenyWrite)

Select Case Err

CaSe 0:

OpenTableExclusive=0

CaSe Else:

OpenTableExclusive=-1

End Select

Err=0

End Function

該過程通過dbDenyWrite 和 dbDenyRead選項常數的組合,以獨占模式打開一個表。如果過程調用成功(返回0),則在Recordset變量被顯式或隱式地關閉之前,其它用戶將不能訪問該表。如果其它用戶已經以獨占模式打開該表,或者發生了一個非預期的錯誤,則該過程返回 -1。為了調用上述過程,可以在窗體上畫一個命令按鈕,然后編寫如下的事件過程:

Private Sub Command1_Click()

Dim a As Integer

Dim MvDbs As Database

Dim MvTabs As Recordset

Set MyDbs=OpenDatabase("C:dbdirdbl.mdb,true)

a=OpenTableExclusive(MyDbs,MyTabs,"Tabel1")

Select Case a

Case 0:

MsgBox "調用成功"

Case Else:

MsgBox "調用出錯"

End Select

End Sub

注意,如果打開一個Recordset對象時沒有指定option:參數值,則Microsoft Jet將使用頁面鎖定。在這種情況下,將以共享模式打開記錄集,并且不禁止其他用戶訪問記錄集中的數據,但它確實鎖定了當前頁中正在編輯的數據。

(2).在打開記錄集時檢查錯誤。和以獨占模式打開數據庫一樣,當對Recordset對象設置鎖定時,如果鎖定失敗,則會產生錯誤。如果某個用戶以禁止其它用戶獲得鎖定的方式打開了一個Recordset對象,則當試圖鎖定該Recordset對象時將會發生最常見的錯誤,即3262,其出錯信息為:“不能鎖定表XXX;當前正被用戶XXX在機器XXX上使用。”。當試圖對不能鎖定的對象使用OpenRecordset方法時,也會產生這個錯誤。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗