使用 Microsoft Visual Basic 應用程式在 Access 中,您可以防止使用者登入 Jet 資料庫。如果使用者已經在資料庫中,它們仍登入 ; 不過,沒有其他使用者都可以開啟資料庫。這就稱為被動關機。
本文中的程式碼範例示範如何執行被動關機,以及如嗯如何輸出已經是使用者的清單登入到資料庫。
連線控制
連線控制 (也稱為被動關機) 功能可防止使用者連接到資料庫。此功能是針對哪些人需要取得獨佔存取權來執行,例如維護資料庫壓縮該資料庫,或是誰需要對資料庫結構描述或應用程式進行更新的資料庫管理員有用的。
呼叫連線控制項時目前已連線到資料庫的使用者仍不會受到影響之前中斷連接。在該點,它們是無法重新連線直到連線控制已被撤銷。
下列案例提供額外深入這項功能的運作方式:
- 五個使用者會在資料庫中。使用者五啟始被動關機。使用者六嘗試連線到該資料庫,但拒絕存取並指出該使用者五防止資料庫正在開啟傳回錯誤訊息。
- 五個使用者會在資料庫中。使用者五啟始被動關機。其中一個關閉資料庫,並嘗試重新連線到資料庫,但被拒絕存取和錯誤訊息的使用者就會傳回指出該使用者五造成資料庫不能被開啟。
- 五個使用者會在資料庫中。使用者五啟始被動關機。使用者五關閉資料庫。使用者六嘗試開啟資料庫,並成功。這是因為呼叫它的使用者保持連線至資料庫時,只持續發生被動關機。
- 五個使用者會在資料庫中。使用者五啟始被動關機。 使用者 1 透過四結束資料庫。使用者五個呼叫使用者清單功能,會決定沒有其他使用者可以在資料庫中。使用者五關閉資料庫,並立即壓縮資料庫。
[使用者] 清單
使用者的清單功能提供決定誰目前連接到 Microsoft Jet 資料庫的方法。清單透過 ADO 程式設計介面,可取得,並且傳回每個使用者的下列資訊:
- 電腦所使用的名稱。
- 安全性名稱也就是使用者識別碼。
- 是否在使用者目前連線至資料庫 (A 使用者識別碼維持鎖定資料庫直到最後一個使用者中斷連線或插槽回收為新的使用者連線為止)。
- 是否已正常終止使用者連線。
使用者清單功能可用於配合連線控制項功能,以判斷仍然連線的使用者,讓它們可以被要求中斷連線。
使用者清單功能也是使用者的有用中區隔特定活動相關聯的資料庫損毀的問題的。
程式碼範例
Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。若要示範程式碼範例,請依照下列步驟執行:
- 將北風貿易範例資料庫複製到 C:\ 目錄。
- 在 Microsoft Access 中開啟 C:\Northwind。
- 建立新的模組呼叫 ShutDownDB。
- 按一下 [工具] 功能表 引用項目。
- 在 [參考] 對話方塊中按一下 [以選取下列參考]:
Microsoft ActiveX 資料物件 2.1 程式庫
- 在新的模組中輸入下列程式碼:
Sub ShowUserRosterAndPassiveShutdown()
Dim cn As New ADODB.Connection
Dim cn2 As New ADODB.Connection
Dim cn3 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim j As Long
On Error GoTo ErrHandler
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.Open "Data Source=c:\Northwind.mdb"
cn2.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=c:\Northwind.mdb"
' Restrict other users from opening the database
cn.Properties("Jet OLEDB:Connection Control") = 1
' Attempt to open another connection to the database
cn3.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=c:\Northwind.mdb"
' The user roster is exposed as a provider-specific
' schema rowset in the Jet 4 OLE DB provider. You have to use
' a GUID to reference the schema, as provider-specific schemas
' are not listed in ADO's type library for schema rowsets
Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _
"{947bb102-5d43-11d1-bdbf-00c04fb92675}")
' Output the list of all users in the current database.
Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _
"", rs.Fields(2).Name, rs.Fields(3).Name
Do While Not rs.EOF
Debug.Print rs.Fields(0), rs.Fields(1), _
rs.Fields(2), rs.Fields(3)
rs.MoveNext
Loop
' Close one of the remaining connections
cn2.Close
' Reopen the user roster to verify that no other users are in the
' database Output the list of all users in the current database.
Set rs = cn.OpenSchema(adSchemaProviderSpecific, , _
"{947bb102-5d43-11d1-bdbf-00c04fb92675}")
Debug.Print rs.Fields(0).Name, "", rs.Fields(1).Name, _
"", rs.Fields(2).Name, rs.Fields(3).Name
Do While Not rs.EOF
Debug.Print rs.Fields(0), rs.Fields(1), _
rs.Fields(2), rs.Fields(3)
rs.MoveNext
Loop
cn.Close
Exit Sub
ErrHandler:
For j = 0 To cn.Errors.Count - 1
Debug.Print "Conn Err Num : "; cn.Errors(j).Number
Debug.Print "Conn Err Desc: "; cn.Errors(j).Description
Next j
For j = 0 To cn2.Errors.Count - 1
Debug.Print "Conn Err Num : "; cn2.Errors(j).Number
Debug.Print "Conn Err Desc: "; cn2.Errors(j).Description
Next j
For j = 0 To cn3.Errors.Count - 1
Debug.Print "Conn Err Num : "; cn3.Errors(j).Number
Debug.Print "Conn Err Desc: "; cn3.Errors(j).Description
Next j
Resume Next
End Sub
- 關閉北風貿易資料庫,並提示時, 儲存變更至 ShutDownDB。(這必須完成發行到您剛剛新增的程式碼由於資料庫的獨占鎖定)。
- 重新開啟 C:\Northwind.mdb。
- 按下 CTRL + G 鍵帶出 [即時運算] 視窗在 Visual Basic 編輯器] 中。
- 在 [即時運算] 視窗中輸入下列命令並按下 ENTER:
ShowUserRosterAndPassiveShutdown
請注意顯示在 [即時運算] 視窗中的資料庫使用者的清單。