文章編號: 198756 - 上次校閱: 2005年6月23日 - 版次: 3.0

如何: 使用連線控制,來防止使用者登入在 Access 2000 的執行階段

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。

在此頁中

全部展開 | 全部摺疊

結論

使用 Microsoft Visual Basic 應用程式在 Access 中,您可以防止使用者登入 Jet 資料庫。如果使用者已經在資料庫中,它們仍登入 ; 不過,沒有其他使用者都可以開啟資料庫。這就稱為被動關機。

本文中的程式碼範例示範如何執行被動關機,以及如嗯如何輸出已經是使用者的清單登入到資料庫。

連線控制

連線控制 (也稱為被動關機) 功能可防止使用者連接到資料庫。此功能是針對哪些人需要取得獨佔存取權來執行,例如維護資料庫壓縮該資料庫,或是誰需要對資料庫結構描述或應用程式進行更新的資料庫管理員有用的。

呼叫連線控制項時目前已連線到資料庫的使用者仍不會受到影響之前中斷連接。在該點,它們是無法重新連線直到連線控制已被撤銷。

下列案例提供額外深入這項功能的運作方式:
  • 五個使用者會在資料庫中。使用者五啟始被動關機。使用者六嘗試連線到該資料庫,但拒絕存取並指出該使用者五防止資料庫正在開啟傳回錯誤訊息。
  • 五個使用者會在資料庫中。使用者五啟始被動關機。其中一個關閉資料庫,並嘗試重新連線到資料庫,但被拒絕存取和錯誤訊息的使用者就會傳回指出該使用者五造成資料庫不能被開啟。
  • 五個使用者會在資料庫中。使用者五啟始被動關機。使用者五關閉資料庫。使用者六嘗試開啟資料庫,並成功。這是因為呼叫它的使用者保持連線至資料庫時,只持續發生被動關機。
  • 五個使用者會在資料庫中。使用者五啟始被動關機。 使用者 1 透過四結束資料庫。使用者五個呼叫使用者清單功能,會決定沒有其他使用者可以在資料庫中。使用者五關閉資料庫,並立即壓縮資料庫。

[使用者] 清單

使用者的清單功能提供決定誰目前連接到 Microsoft Jet 資料庫的方法。清單透過 ADO 程式設計介面,可取得,並且傳回每個使用者的下列資訊:
  • 電腦所使用的名稱。
  • 安全性名稱也就是使用者識別碼。
  • 是否在使用者目前連線至資料庫 (A 使用者識別碼維持鎖定資料庫直到最後一個使用者中斷連線或插槽回收為新的使用者連線為止)。
  • 是否已正常終止使用者連線。
使用者清單功能可用於配合連線控制項功能,以判斷仍然連線的使用者,讓它們可以被要求中斷連線。

使用者清單功能也是使用者的有用中區隔特定活動相關聯的資料庫損毀的問題的。

程式碼範例

Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。若要示範程式碼範例,請依照下列步驟執行:
  1. 將北風貿易範例資料庫複製到 C:\ 目錄。
  2. 在 Microsoft Access 中開啟 C:\Northwind。
  3. 建立新的模組呼叫 ShutDownDB
  4. 按一下 [工具] 功能表 引用項目
  5. 在 [參考] 對話方塊中按一下 [以選取下列參考]:
    Microsoft ActiveX 資料物件 2.1 程式庫
  6. 在新的模組中輸入下列程式碼:
    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
    					

  7. 關閉北風貿易資料庫,並提示時, 儲存變更至 ShutDownDB。(這必須完成發行到您剛剛新增的程式碼由於資料庫的獨占鎖定)。
  8. 重新開啟 C:\Northwind.mdb。
  9. 按下 CTRL + G 鍵帶出 [即時運算] 視窗在 Visual Basic 編輯器] 中。
  10. 在 [即時運算] 視窗中輸入下列命令並按下 ENTER:
    ShowUserRosterAndPassiveShutdown
    					
請注意顯示在 [即時運算] 視窗中的資料庫使用者的清單。






這篇文章中的資訊適用於:
  • Microsoft Access 2000 Standard Edition
關鍵字:?
kbmt kbhowto kbhowtomaster KB198756 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:198756? (http://support.microsoft.com/kb/198756/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。