Accessデータベースを開くと、同じファイル名で拡張子が「.LDB」のファイルが同時に生成されます。ここには、そのデータベースを共有するすべてユーザーのロック情報が書き込まれています。
このファイルは全長64バイトの固定長テキストファイルとなっており、次のようなコードを使うことによって、データベースを共有しているユーザーの「コンピュータ名」と「セキュリティ名」を取得することができます。ただし、あるユーザーがデータベースを閉じてもその情報は.LDBから消えないので、実際には"現在のログインユーザー名を調べる"というより、"過去の最大ログインユーザー数を調べる"といった用途になると思います。
Option Compare Database
Option Explicit
Type LDBLockInfo
ComputerName As String * 32
SecurityName As String * 32
End Type
Sub GetLDBInfo()
Dim tLockInfo As LDBLockInfo
Dim strLDBPath As String
Dim lngFileNum As Long
'カレントデータベースのロック情報ファイルのパスを取得
'(ここでは代わりにリンクテーブルのあるMDBのLDBパスを指定してもよい)
strLDBPath = Left$(CurrentDb.Name, Len(CurrentDb.Name) - 4) & ".LDB"
'そのファイルを固定長テキストファイルとして開く
lngFileNum = FreeFile()
Open strLDBPath For Random As #lngFileNum Len = Len(tLockInfo)
'ファイルの全レコードを読み込み
Do Until EOF(lngFileNum)
Get #lngFileNum, , tLockInfo
'取得した情報を出力
If Len(Replace(tLockInfo.ComputerName, vbNullChar, "", , , vbBinaryCompare)) > 0 Then
'NULL文字だけから成るデータは除外
Debug.Print tLockInfo.ComputerName, tLockInfo.SecurityName
End If
Loop
Close #lngFileNum
End Sub
|