国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

共享數據的鎖定--多客戶環境下VB數據庫編程之(3)

2019-11-18 17:45:34
字體:
來源:轉載
供稿:網友
前一節介紹了對數據訪問的一些限制,其中講到了對表的鎖定。這一節將進一步地談一談如何實現共享數據的鎖定操作。要保護共享數據,可以在用戶編輯數據時鎖定它。數據被鎖定后,任何用戶都可以讀取它,但僅有一個用戶可以修改它。MicrosoftJet可以在以下三種不同的級別上鎖定數據:

·獨占模式:阻止其他所有用戶訪問數據庫,這是限制最大的模式,上一節已介紹過。
·記錄集鎖定:即鎖定Recordset對象的基本表,用讀表鎖定、寫表鎖定或兩者都用。
·頁面鎖定:鎖定含有正在編輯的數據的頁面,其長度為2048個字節(2K)。這是限制最小的模式。

在應用程序中用哪一種模式來鎖定對象,主要看所需要的并發級別。例如,如果想使對象在任何時候都可用,則可使用頁面鎖定,因為它是限制最小的級別。如果應用程序要保證數據庫中的大多數或所有數據都可訪問,則應選擇獨占模式,這種模式確保應用程序獨占數據庫的訪問。注意,這三種級別可以結合使用。例如,假定有一個訂單系統,則可以用頁面鎖定來控制訂單表的鎖定,使訂單接收者之間的并發程度最高。在一天結束時用記錄集鎖定來鎖定匯總表,這個匯總表要用匯總數據來更新。最后,可以在夜間使用獨占模式來整理數據庫。

1.共享模式與獨占模式

如前所述,獨占模式是打開數據庫限制最大的方式,它阻止其他所有用戶打開該數據庫。這種模式常用于數據庫管理或數據庫的批量修改,例如修復或整理操作以及改變數據庫的結構等。在單用戶環境中訪問數據庫時,通常以獨占模式打開數據庫,這可以提供更好的性能,因為MicrosoftJet不必對對象進行鎖定和解鎖,也不必刷新高速緩存器。但是,當在多用戶環境中使用應用程序時,通常以共享模式打開數據庫。

(1).以共享模式打開數據庫

為了實現記錄集鎖定,必須以共享模式打開數據庫。當以共享模式打開數據庫時,可能會有多個用戶同時對數據庫進行訪問,在這種情況下,MicrosoftJet將處理各用戶間試圖編輯相同記錄的沖突。前一節中講過,當用OpenDatabase方法打開數據庫時,只要把Options參數的值設置為False,就能以共享模式打開數據庫。下面舉一個例子。

編寫一個Function過程,調用該過程,可以根據需要用共享模式或獨占模式打開數據庫。過程如下:

FunctionOPenDatabaseX(dbsAsDatabase,strDBPathAsString,blnExclusiveAsBoolean)AsInteger'關閉錯誤捕獲

OnErrorResumeNext'打開strDBPath所指定的數據庫。如果blnExclusive為True,則以獨占模式打開數據庫:否則,以共享模式打開數據庫

Setdbs=OpenDatabase(strDBPath,blnExclusiVe)
SelectCaseErr
CaSe0:
OPenDatabaseX=0
Case3033:
OpenDatabaseX=3033
Case3343:
OpenDatabaseX=3343
Case3044:
OpenDatabaseX=3044
Case3024:
OpenDatabaseX=3024
CaseElse:
OpenDatabaseX=-l
EndSelect
EndFunCtion

該過程以共享模式或獨占模式打開一個數據庫,由參數blnExclusive決定。如果blnExclusive參數為True,則數據庫以獨占模式打開;否則,數據庫以共享模式打開。在該過程中,用錯誤處理程序來檢測錯誤,并根據過程調用的執行情況返回錯誤代碼。該過程有3個參數,分別為數據庫對象變量名、數據庫名(包括路徑)和模式開關。為了調用這個過程,應先用Dim語句聲明一個Database對象變量,然后把這個對象變量和數據庫的名字(strDBPath)一起傳送給OpenDatabaseX過程。在調用OpenDatabaseX的代碼時,應當檢查OpenDatabaseX的返回值,看是否有錯誤發生,然后根據發生的錯誤采取相應的措施。在窗體上畫一個命令按鈕,然后在下面的事件過程中調用過程OpenDatabaseX:

PnvateSubCommandl_Click()
DimaAsInteger
DimMvDbsAsDatabase
a=OpenDatabaseX(MyDbs,"c:/Vb50/biblio.mdb",False)
SelectCasea
Case0:
MsgBox"調用成功"
Case3033:
MsgBoxError(3033)
Case3343:
MsgBOxError(3343)
Case3044:
MsgBoxEnor(3044)
Case3024:
MsgBoxError(3024)
CaseElse:
MSgBoxError(3024)
EndSeleCt
EndSub

OPenDatabaseX過程的返回值是一個整型數,它是調用時產生的錯誤代碼。當返回值為0時,表示調用成功,顯示一個信息框。上述事件過程以共享方式打開一個數據庫,如果把OpenDatabaseX的第三個參數改為True,則以獨占方式打開該數據庫。如果在調用時出錯,則將返回錯誤代碼,在事件過程中用Error函數顯示相應的信息。例如,假定把數據庫名改為:e:/vb50/biblio.mdb。則由于該數據庫的路徑不對而出錯,產生出錯信息。

(2).使用只讀模式

只讀模式是共享模式的特殊形式。當以只讀模式打開一個數據庫時,不能改變數據庫的數據或對象。但是,其他用戶可以改變數據,不要把這種模式與在操作系統級以只讀模式打開文件相混淆。下面的代碼以獨占的只讀模式打開一個數據庫:
SetdbsOrdEntry=OpenDatabase("OrdEntry.mdb",True,True)
如果以共享的只讀模式打開一個數據庫,則應使用下面的代碼:
SetdbsOrdEntry=OpenDatabase("OrdEntry.mdb",False,True)
注意,以只讀模式打開數據庫時,并不禁止共享表類型的鎖定或讀鎖定;因此,以只讀模式打開數據庫不能防止鎖定沖突的發生。限制程序為只讀方式的另一種辦法是為記錄集使用快照,快照類型的記錄集總是只讀的。當基表中的數據不需要經常修改時,可以使用快照。由于快照存放在內存中,因此其操作比使用表或動態集的相同操作速度要快。但是,由于快照的內存需求和裝入內存時要花費一定的時間,最好把快照用于返回記錄在200以內的查詢中。->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜章县| 南澳县| 临邑县| 楚雄市| 崇礼县| 拜城县| 绿春县| 贡觉县| 上饶市| 江西省| 肥东县| 天柱县| 尉氏县| 分宜县| 平和县| 西乌珠穆沁旗| 佳木斯市| 珲春市| 临江市| 博乐市| 牡丹江市| 宣汉县| 宝清县| 台山市| 曲靖市| 嘉定区| 兴义市| 河东区| 大兴区| 贺兰县| 鄂托克旗| 安庆市| 右玉县| 游戏| 蓝山县| 泰宁县| 洛川县| 盐城市| 玛沁县| 金昌市| 昭苏县|