程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 記錄集鎖定--多客戶環境下VB數據庫編程之(4)

記錄集鎖定--多客戶環境下VB數據庫編程之(4)

編輯:VB綜合教程
用記錄集鎖定可以鎖定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方法時,也會產生這個錯誤。->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved