vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Datenbanken · DAO   |   VB-Versionen: VB4, VB5, VB605.08.02
Angemeldete Benutzer ermitteln (DAO)

Dieses Beispiel zeigt, wie sich alle an einer Access-MDB angemeldeten Benutzer ermitteln lassen.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  43.249 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wollten Sie schon immer mal wissen, wieviele User gerade auf eine bestimmte Datenbank zugreifen?

Wird für den Datenbankzugriff die DAO-Engine verwendet, so erzeugt die JET-Engine beim Öffnen der Datenbank autom. auch immer eine LDB-Datei, die sich im gleichen Verzeichnis befindet, wie die Datenbank selbst. Beim Schließen der Datenbank wird diese LDB-Datei automatisch wieder gelöscht - sofern kein Benutzer / Computer die Datenbank noch geöffnet hat.

Um also zu prüfen, ob die Datenbank überhaupt geöffnet ist, würde demnach eine Prüfung auf Vorhandensein der LDB-Datei ausreichen. Manchmal jedoch kommt es vor, dass die LDB-Datei nicht gelöscht wird, obwohl die Datenbank von keinem Benutzer mehr geöffnet ist. Dies ist immer dann der Fall, wenn eine Anwendung aufgrund eines Fehlers vorzeitig und somit unerwartet beendet wird.

Das macht aber nichts, denn wird die Datenbank erneut geöffnet, so wird eine evtl. noch vorhandene LDB-Datei zunächst gelöscht und anschließend neu erstellt. Was liegt also näher, die Datenbank mal eben kurz zu öffnen und wieder zu schließen, bevor man die Anzahl der angemeldeten Benutzer der Access-Datenbank prüft.

Jeder Benutzer, der eine Datenbank öffnet, wird in der LDB-Datei als "Datensatz gespeichert". Ein solcher Datensatz besteht aus exakt 64 Bytes mit folgendem Aufbau:

Computername * 32
LoginName * 32

Um nun die Anzahl Benutzer zu ermitteln, braucht man lediglich Dateigröße der LDB-Datei durch 64 zu teilen:

Dim nSize As Long
Dim nUsers As Long

nSize = FileLen("Datenbank.ldb")
nUsers = Int(nSize / 64)

MsgBox "Anzahl angemeldeter Benutzer: " & CStr(nUsers)

Das nachfolgende Beispiel zeigt, wie sich neben der Anzahl Benutzer, auch die einzelnen Benutzerinfos ermitteln lassen. Erstellen Sie hierzu ein neues Projekt und aktivieren zunächst den Verweis auf die Microsoft DAO 3.6 Object Library. Plazieren Sie anschließend eine ListBox (lstUsers), ein Label-Control (lblUsers), sowie einen CommandButton (Command1) auf die Form.

Beim Klicken auf den CommandButton sollen dann alle Infos zu den angemeldeten Benutzer einer Datenbank in der ListBox ausgegeben werden.

Option Explicit
 
' DB-User Info
Private Type typDBUsers
  ComputerName As String * 32
  LoginName As String * 32
End Type
Private Sub Command1_Click()
  ' Angemeldete Benutzer einer Access-MDB ermitteln (DAO)
  Dim DB As Database
  Dim sLDBFile As String
  Dim sPassword As String
  Dim sDBFilename As String
  Dim nUsers As Long
  Dim nSize As Long
  Dim I As Integer
  Dim F As Integer
  Dim UDT_User As typDBUsers
 
  ' Liste löschen
  lstUsers.Clear
  lblUsers.Caption = ""
 
  ' Datenbank-Datei
  sDBFilename = "d:\temp\test.mdb"
 
  ' ggf. hier Passwort eintragen
  sPassword = ""
 
  ' LDB-Datei
  sLDBFile = Left$(sDBFilename, Len(sDBFilename) - 4) + ".LDB"
 
  ' Datenbank öffnen und wieder schließen, so dass eine evtl.
  ' aus einer vorigen Sitzung nicht gelöscht LDB-Datei
  ' gelöscht wird
  Set DB = Workspaces(0).OpenDatabase(sDBFilename, _
    False, False, ";pwd=" & sPassword)
  DB.Close
  DoEvents
 
  ' LDB-Datei vorhanden?
  nUsers = 0
  If Dir$(sLDBFile) <> "" Then
    nSize = FileLen(sLDBFile)
    If nSize > 0 Then
      ' Anzahl Users
      nUsers = Int(nSize / 64)
 
      ' Datei öffnen und alle Benutzer ermitteln
      F = FreeFile
      Open sLDBFile For Random Shared As #F Len = Len(UDT_User)
      For I = 1 To nUsers
        Get #F, I, UDT_User
        With UDT_User
          lstUsers.AddItem TrimNullChar(.LoginName) & _
            " (" & TrimNullChar(.ComputerName) & ")"
        End With
      Next I
      Close #F
    End If
  End If
  lblUsers.Caption = CStr(nUsers) + " Benutzer angemeldet"
End Sub
' Hilfsfunktion
' Gibt den Text eines Strings bis zum ersten Null-Zeichen zurück
Private Function TrimNullChar(ByVal sString As String) As String
  Dim lPos As Long
 
  lPos = InStr(sString, vbNullChar)
  If lPos > 0 Then sString = Left$(sString, lPos - 1)
 
  TrimNullChar = RTrim$(sString)
End Function

Dieser Tipp wurde bereits 43.249 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel