Access で Microsoft Jet UserRoster を使用してデータベースにログオンしているユーザーを特定する方法

注意

Office 365 用リソース は、 エンタープライズ向け Microsoft 365 アプリに名前変更されています。 この変更の詳細については、 このブログの投稿を参照してください。

Advanced: 専門的なコーディング、相互運用性、およびマルチユーザースキルが必要です。

この記事は、Microsoft Access データベース (.mdb) ファイルまたは Microsoft Access データベース (.accdb) ファイルに適用されます。

概要

この記事では、Microsoft Visual Basic for Applicationsを使用して、データベースにログオンしているユーザーの一覧を出力する方法を示します。

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 Microsoft のサポート エンジニアが、特定の手順の機能をわかりやすく説明します。 ただし、これらの例を変更して、追加の機能を提供したり、特定の要件を満たす手順を構築したりは行ないます。

次のサンプル コードを使用すると、次の情報が返されます。

  • コンピューター名。
  • ログオン名。
  • ユーザーが現在データベースに接続されているかどうかを指定します。 (ユーザーの ID は、最後のユーザーが切断されるまで、または新しいユーザー接続のためにスロットが再利用されるまで、ロック データベースに残ります。
  • 通常の状況でユーザー接続が終了したかどうか。

この情報は、特定のユーザーのアクティビティに関連付けられているデータベース破損に関する問題を分離するためにも使用できます。

Procedure

注意事項

この例の手順に従う場合は、サンプル データベース Northwind.mdb を変更します。 Northwind.mdb ファイルをバックアップし、データベースのコピーで次の手順を実行できます。

データベースにログオンするユーザーを確認するには、次の手順を実行します。

  1. サンプル データベース Northwind.mdb を開きます。

    メモ Access 2007 で Northwind2007 サンプル データベースを開き、Northwind2007 サンプル データベースを閉じてから、Northwind2007 サンプル データベースを再度開きます。

  2. [表示] メニューの [データベース オブジェクト] をポイントし、[モジュール] をクリックします。

    メモ Access 2007 で、[データベース ツール] Visual Basic マクロ グループの [データベース ツール] を クリック します。

  3. [新規作成] をクリックします。

    メモ Access 2007 で、エディター [挿入] メニューの [モジュール] Visual Basicします。

  4. 次のコードを入力または貼り付けます。

    メモ この記事のサンプル コードでは、Microsoft データ オブジェクトActiveX使用します。 このコードを正しく実行するには、Microsoft ActiveX Data Objects 2.1 以降のバージョンライブラリを参照する必要があります。 これを行うには、Visual Basicエディターの[ツール] メニューの [参照] をクリックし 、[Microsoft ActiveX Data Objects 2.1 ライブラリ] チェック ボックスがオンに設定されている必要があります。

    Sub ShowUserRosterMultipleUsers()
        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
    
        Set cn = CurrentProject.Connection
    
        ' The user roster is exposed as a provider-specific schema rowset
        ' in the Jet 4.0 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
    
        While Not rs.EOF
            Debug.Print rs.Fields(0), rs.Fields(1), _
            rs.Fields(2), rs.Fields(3)
            rs.MoveNext
        WEnd
    
    End Sub
    
  5. モジュールを ShowUsers として保存します。

  6. Ctrl + G キーを押してイミディエイト ウィンドウを開きます。

  7. イミディエイト ウィンドウに次の行を入力し、Enter キーを押します。

    ShowUserRosterMultipleUsers
    
    

    [ イミディエイト] ウィンドウは、データベースにログオンしているユーザーの一覧を返します。