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.251 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) |
||||||||||||||||
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. |