#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'sWareのワンポイトテクニカルアドバイスをご利用ください。3000円/件〜でご支援します。
スタンドアロンからSQL Server対応まで、オーダーメイドのシステムを短納期・安価でお届けします
 

Copyright © T'sWare All rights reserved