データベースにログインしているユーザー名を取得するには



データベースにログインしているユーザー(Computer Name)を取得する方法を解説します。データベースにログインしているユーザー名は、.LDBファイルに格納されています。マイクロソフトのホームページに.LDBファイルからユーザー名を取得するためのDLL(Msldbusr.dll)が公開されていますので事前にJetutils.exeをダウンロードしておいてください。

Jetutils.exeを起動すると、Msldbusr.exeが解凍されます。Msldbusr.dll
このMsldbusr.exeを実行すると自己解凍されます。このDLLは、C:\Windows\System (Windows 95/98)または、C:\Winnt\System32( Windows NT) のフォルダにインストールします。

  1. Access 97を起動して新規データベースを作成します。
  2. データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。
  3. メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。
  4. データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。
  5. フォームが表示されたら、テキストボックス、フォルダ用のイメージコマンドボタン2個、オプショングループリストボックスを作成します。
    Forms_Intermediate_010_fig1
    図1-フォーム上にテキストボックス、イメージ、コマンドボタン、リストボックスなどを作成

    各オブジェクトのプロパティは以下のように設定します。

    Object Property Setting
    TextBox Name txtFullPath
    Image Name imgCommonDialog
    Option Group Name grpOptions
    Option Value
    All Users 1
    Logged in Users 2
    Corrupt Users 4
    User Count 8
    ListBox Name lstResult
    Column Count 1
    CommandButton1 Name cmdRun
    CommandButton2 Name cmdQuit


    フォームのOn Open, On Closeイベント、それから各コマンドボタンののOn Clickイベントに以下のVBAコードを追加します。イメージのOn Clickイベントには、Windowsのコモンダイアログを表示するためのコードを追加します。

    リスト1-各種イベント処理用コード
    Dim mobjUsers As Object ' clsMyBox
    
    Private Sub cmdRun_Click()
      Dim varBuffer As Variant
      Dim intRet As Integer
      Dim intI As Integer
      Dim strMDBFullPath As String
      Dim lngOptions As Long
        
      mobjUsers.Clear
        
      If Nz(Me!txtFullPath) <> "" Then
          strMDBFullPath = Me!txtFullPath
          lngOptions = Me!grpOptions
          intRet = GetUsers_FS(strMDBFullPath, lngOptions, varBuffer)
          With mobjUsers
            If IsArray(varBuffer) Then
              For intI = LBound(varBuffer) To UBound(varBuffer)
                  If Nz(varBuffer(intI)) <> "" Then
                    .AddItem CStr(intI + 1) & " " & varBuffer(intI)
                  End If
              Next intI
              .AddItem "# of Users = " & intRet
            Else
              .AddItem varBuffer
              .AddItem "Error Code = " & intRet
            End If
          End With
      End If
        
    End Sub
    
    Private Sub cmdQuit_Click()
        DoCmd.Quit
    End Sub
    
    Private Sub Form_Close()
      Dim varRet As Variant
      varRet = CloseMyBox_FS("I", mobjUsers)
    End Sub
    
    Private Sub Form_Open(Cancel As Integer)
      Set mobjUsers = GetMyBox_FS("I")
      Set mobjUsers.Control = Me!lstResult
    End Sub
    
    Private Sub imgCommDialog_Click()
      Dim strFullPath As String
      strFullPath = OpenFile_FS("C:\", "Please Select a MDB|MDE file!")
      If Len(strFullPath) > 0 Then
          Me!txtFullPath = strFullPath
      End If
      Me!txtFullPath.SetFocus
    End Sub
    

    フォームのOn Openイベントでは、clsMyBoxのインスタンスを生成してモジュールレベルのメモリ変数)に格納します。On Closeイベントでは、インスタンスをクローズします。

    イメージのOn Clickイベントでは、OpenFile_FS()関数を呼び出してWindowsのコモンダイアログを表示させます。この関数を使用した場合、一覧に全てのファイルが表示されます。データベースファイル(*.mdb)のみ表示させたいときは、OpenFileEXT_FS()関数を使用してください。

    実行ボタンのOn Clickイベントでは、GetUsers_FS()関数を呼び出してユーザー名を取得しています。戻り値としてユーザー数が返されます。

  6. フォームをfrmLDBViewの名称で保存します。
  7. ビューモードに切り替えたら、フォルダのイメージをクリックしてWindowsのコモンダイアログを表示させて、既に開かれているデータベースを選択します。オプショングループから、All Usersを選択したら実行ボタンをクリックします。リストボックスにユーザー名とユーザー数が表示されます。

    Forms_Intermediate_010_fig2
    図2-データベースにログインしているユーザー名を表示した例
  8. 最後に、フォームを閉じてAccessを終了します。