#013 ネットワークユーザー名を取得するには? VBA、API

ネットワーク上にMDBファイルを置いて複数ユーザーで共有する場合、そのセキュリティやデータベース権限の制御に関しては、Accessのワークグループ管理を使ったりあるいはセキュリティウィザードを使ったり、あるいはサーバーそのもののセキュリティで対応する場合もあるかもしれません。

ここではその一つの方法として、ネットワークにログオンしたときのクライアントPCのネットワークユーザー名を取得して、その名前によってVBA上で制御するという場合を考え、そのネットワークユーザー名を取得する方法をご紹介します。

以下のコードを記述して、NetUserNameプロシージャを呼び出すと、そのユーザー名が返されます。
Declare Function WNetGetUser Lib "mpr" Alias "WNetGetUserA" (ByVal lpName As String, ByVal lpUserName As String, lpnLength As Long) As Long
※このDeclare〜 は標準モジュールに記述するか、先頭に"Private"を付けてフォームモジュールに記述します。

Function NetUserName() As String
  Dim strUserName As String * 255
  
  'WindowsAPIをコールしてネットワークユーザー名を取得します
  If WNetGetUser("", strUserName, 255) = 0 Then
    'APIの返り値が正常なら、後続のNullを取り除きます
    '(これはAPIの関数から値を取得する場合にしばしば使用する定型的な処理です)
    NetUserName = Left$(strUserName, InStr(strUserName, Chr$(&H0)) - 1)
  Else
    NetUserName = ""
  End If
End Function


使用例:
'フォームが開く時、ネットワークユーザー名を調べて
'ユーザー "hoshino" に対してはレコードの追加を禁止する。

Private Sub Form_Load()

  Me.AllowAdditions = Not (NetUserName() = "hoshino")

End Sub
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved