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

數據訪問控制

在單用戶環境中,只有一個用戶在訪問數據,因此應用程序不會發生資源請求沖突。而在多用戶環境中,當用戶訪問數據時,可能會發生沖突。為了管理這些沖突,Microsoft Jet提供了數據訪問控制和應用程序的鎖定服務,以保證在給定的時間內只有一個用戶可以訪問數據。數據訪問控制用來對數據庫的部分或全部進行訪問限制,通常可分為兩類,一類是用戶限制,另一類是功能限制。用戶限制用來阻止某些人(或只允許某些人)查看或修改“敏感”數據。例如,在工資系統中,大多數人可以查看職工的工資,但只有少數人才有權修改實際的工資信息。功能限制只對程序的某個部分起作用,而不管用戶是誰。例如,在訂單登記系統中,如果把價格表設為只讀模式,則可防止用戶隨意修改某些項目的價格。 在應用程序中,可以通過程序控制或Microsoft Jet數據庫引擎控制來處理限制。其中程序控制可以施加于程序自身,而引擎級控制則限制了任何試圖訪問數據庫信息的程序。

1.互斥地使用數據庫。以互斥方式打開數據庫是對數據訪問施加的最大限制,它實際上是以“獨占”方式使用數據庫。這種限制可以阻止任何用戶或程序訪問正在使用的數據庫中的信息。由于這種方式的限制太大,因而只用于那些影響整個數據庫的操作,包括:

壓縮數據庫。

更新整個表(例如用UPDATE查詢)。

通過添加表、字段或者索引來修改數據庫的結構。

處理特殊的用戶需求(例如傳送審計信息)。

在程序代碼中,為了以獨占方式打開一個數據庫,必須把OpenDatabase方法的第二個參數設置為True,例如:

Dim oldDb As Database

Dim oldws As workSpace

Set oldDb=oldWs.OpenDatabase("Members.mdb",True,False)

用上面的代碼打開數據庫時,如果該數據庫未被其它用戶使用,則打開數據庫,這樣直到關閉之前,該數據庫不會被其它用戶或程序訪問;如果數據庫正在被其它用戶使用,則返回一個錯誤。

2.拒絕其它用戶或程序訪問指定的表。以獨占方式打開數據庫后,可以拒絕其它用戶或程序訪問整個數據庫(包括數據庫中的每個表)。而對數據訪問的一種較輕的限制則是拒絕其它用戶或程序訪問由本人程序正在使用的表(即記錄集),它實際上是對記錄集進行鎖定。鎖定記錄集的操作通過OpenRecordset方法中的Options參數來實現。我們知道,OpenRecordset方法的格式如下:

對象.OpenRecordset(type,OPtlons,lockedits)

其中的options參數用來設置對記錄集的鎖定,該參數可以取多種值,以下兩種值用來禁止其它用戶對記錄集進行讀寫操作:

1..禁止讀(dbDenyRead)

OpenRecordset方法中的dbDenyRead常量用來禁止其它用戶查看表中的數據,直到關閉該表為止。當需要更新整個表中的信息時,可以使用這個常量。例如:

Dim rst as Recordset

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

2.禁止寫(dbDenywrite)

OpenRecordset方法中的dbDenyWrite常量用來禁止其它用戶更新表中的數據,直到關閉該表為止。在這種情況下,其它用戶可以查看表中的信息,也可以添加新記錄,但不能對其進行修改。當需要向表中插入新記錄而又不想修改現有的記錄時,可以使用這個常量,它對表和動態集都有效。例如:

Dim rst as Recordset

Set rst=dbs.OPenRecordset(strTable, dbOpenTable,dbDenyWrite)

用dbDenyRead和dbDenyWrite可以分別禁止對記錄集進行讀和寫,如果既想禁止讀,又想禁止寫,則可同時使用這兩個常量(用“十”號連接)。例如:
Dim rst as Recordset

Set rst=dbs.OpenRecordset(strTable,dbOpenTable,dbDenyRead + dbDenyWrite)
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗