Damit Sie Wartungsarbeiten oder Änderungen an einer gemeinsam genutzten Datenbank vornehmen können, müssen alle Anwender ihre Arbeit mit der Datenbank beenden.
Für diesen Zweck müssen Sie wissen, welche Anwender momentan mit der Datenbank arbeiten. Hilfreich wäre in diesem Fall also eine Liste der Anwender, die die Datenbank derzeit benutzen. Diese Liste sollte auch den Namen der Rechner enthalten, an denen sich die jeweiligen Anwender angemeldet haben, da es auch beispielsweise vorkommen kann, dass Anwender auf mehreren Rechnern gleichzeitig angemeldet sind.
Microsoft hat für diesen Zweck in ADO beziehungsweise OLE DB eine Funktion vorgesehen, die als so genanntes „Schema“ realisiert ist. Einfach ausgedrückt können Sie anhand einer Schema-ID weitergehende Informationen vom OLE – DB-Provider anfordern, die dieser dann als Schema in Form eines Recordsets liefert.
Um diese Auflistung in einer Access- Datenbank abzurufen, verwenden Sie die VBA-Funktion „AngemeldeteAnwender()“, die eine Werteliste als Ergebnis liefert, die einer Liste im Formular zugrunde gelegt werden kann. Anhand dieser Informationen können Sie die aktiven Anwender kontaktieren und sie da – rum bitten, die Arbeit mit der Datenbank zu beenden.
Werfen wir einen Blick auf die Arbeitsweise der Funktion „AngemeldeteAnwender()“:
Function AngemeldeteAnwender() 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 zu nächst der Objektvariable „cnn“ die aktuelle Verbindung der Datenbank über „CurrentProject“ zu.
„cnn.OpenSchema“ liefert dann das über die Schema-ID „{947BB102-5D43- 11D1-BDBF-00C04FB92675}“ spezifizierte Recordset als Ergebnis (Schema- IDs sind in der Dokumentation des jeweiligen OLE-DB-Providers aufgelistet).
strListe = „“
While Not rs.EOF ‚Feldinhalte ausgeben
strListe = strListe & _
VBAStr(rs.Fields(1).Value) & _
“ (“ & _
VBAStr(rs.Fields(0).Value) & „);“
rs.MoveNext
Wend
AngemeldeteAnwender = Left$(strListe, Len(strListe) – 1)
End Function
Das Recordset gibt im ersten Feld über den Rechnernamen und im zweiten Feld über den Anwendernamen Auskunft.
Diese Informationen setzen wir zu einer Zeile der Form „Anwendername (Rechnername)“ zusammen. Die Hilfsfunktion „VBAStr()“ konvertiert dabei einen nullterminierten C-String in eine VBA-Zeichenkette.
Um die Lösung in Ihren Datenbanken zu nutzen, übertragen Sie einfach das Modul „modAngAnw“ und das Formular „Angemeldete Anwender anzeigen“ aus der Beispieldatenbank in Ihre Anwendung.