Angemeldete User auslesen (1)

Datenbank

Wenn Sie eine Datenbank im Netzwerk einsetzen und Wartungs- oder Reparaturarbeiten anstehen, ergibt sich immer wieder das Problem, dass Anwender momentan noch mit der Datenbank arbeiten. Solange das der Fall ist, erlaubt Access die Ausführung bestimmter Funktionen wie der Komprimierung nicht. Hilfreich wäre in diesem Fall eine Liste der User und Rechner, die die Datenbank zur Zeit benutzen. Microsoft hat deshalb in ADO bzw. OLE DB eine Möglichkeit vorgesehen, die aktuell mit einer Datenbank arbeitenden Anwender aufzulisten.

Diese Funktion ist als so genanntes „Schema“ realisiert. Einfach ausgedrückt, können Sie anhand einer „Schema-ID“ weiter gehende Informationen vom OLE DB-Provider abrufen, die dieser dann als Schema in Form eines Recordsets liefert.

Um diese Auflistung in einer Access- Datenbank abzurufen, reicht eine kleine VBA-Routine, die das Ergebnis im Direktfenster über „Debug.Print“ ausgibt.

Anhand dieser Informationen können Sie die noch aktiven User dann kontaktieren und sie darum bitten, die Arbeit mit der Datenbank zu beenden:

Function UserListAsString() As String
Dim cnn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strListe As String

Set cnn = CurrentProject.Connection
Set rs = cnn.OpenSchema(adSchemaProviderSpecific, , _
„{947BB102-5D43-11D1-BDBF-00C04FB92675}“)

Der Abruf von Schemata erfolgt über die „OpenSchema“-Methode des „Connection“- Objektes. Dazu weisen Sie zunächst der Objektvariable „cn“ die aktuelle Verbindung der Datenbank über „Current- Project“ zu. „cn.OpenSchema“ liefert dann den über die Schema-ID „{947BB- 102-5D43-11D1-BDBF-00C04FB92675}“ spezifizierten Recordset als Ergebnis (Schema-IDs sind in der Dokumentation des jeweiligen OLE DB-Providers aufgelistet).

While Not rs.EOF ‚Feldinhalte ausgeben
Debug.Print „Rechner: “ & rs.Fields(0).Value
Debug.Print „User: “ & rs.Fields(1).Value
Debug.Print String$(50, „-„)
rs.MoveNext
Wend

Dieser Recordset gibt im ersten Feld über den Rechnernamen und im zweiten Feld über den Usernamen Auskunft. Diese Informationen schreiben Sie hier pro User durch eine Linie getrennt in das Direktfenster.

Bei Bedarf öffnen Sie nun einfach mit Strg+G das Direktfenster, geben

? Userlist()

ein und können sofort sehen, welche User momentan mit der betreffenden Datenbank arbeiten.


Angemeldete Anwender anzeigen

Wenn Sie regelmäßig eine Übersicht der angemeldeten Anwender benötigen, ist der Abruf der Liste über das Direktfenster zu umständlich. Nutzen Sie stattdessen ein Formular und ein Listen-Steuerelement, dessen Eigenschaft „Herkunftstyp“ auf „Werteliste“ eingestellt ist. Die für die Werteliste als „Datenlieferant“ verwendete Funktion „UserListAsString()“ finden Sie ebenfalls fertig vorbereitet im Modul „modUserlist“.

In der Ereignisprozedur „Beim Laden“ eines Formulars wird diese Liste wie folgt initialisiert:

Me.IstAngAnw.RowSource = UserListAsString()

Damit die Liste später bei Bedarf aktualisiert werden kann, ist eine entsprechende Schaltfläche AKTUALISIEREN vorhanden, deren Ereignisprozedur „Beim Klicken“ diese Initialisierung mit genau derselben Anweisung wiederholt.