Tipp 4.16 - Daten in Benutzung
Wie kann ich mit DAO überprüfen, ob die Daten einer bestimmten Tabelle/Abfrage in Verwendung sind?
Mit einem kleinen, aber feinen Trick können Sie dies relativ schnell feststellen. Sie müssen nur zwei zusätzliche Argumente beim Öffnen Ihres Recordsets verwenden. Über die Option dbDenyWrite wird verhindert, dass andere Benutzer Datensätze ändern oder hinzufügen können und über die Option dbDenyRead verhindern Sie, dass andere Benutzer Daten in Tabellen lesen können. Falls hier ein Fehler auftritt, ist die zu überprüfende Tabelle/Abfrage bereits in Verwendung. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Beispiel:
' Sind Tabellen-Daten in Verwendung? Public Function IsTableDataOpen(psTable As String) As Boolean '// ----------------------------------------------------- '// Methode | Überprüft, ob eine Tabelle bereits ' irgendwo in Verwendung ist '// ----------------------------------------------------- '// Parameter | psTable - Name der Tabelle, die überprüft ' werden soll '// ----------------------------------------------------- '// Rückgabe | Boolean - True = Tabelle wird verwendet '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispielaufruf: ' Public Sub TestFormularData() ' If IsTableDataOpen("Personal") = True Then ' MsgBox "Das Formular kann nicht geöffnet werden!", _ ' vbInformation, "Hinweis" ' Else ' DoCmd.OpenForm "frmPersonal" ' End If ' End Sub '// ----------------------------------------------------- Dim rst As DAO.Recordset On Error Resume Next '* Über die Option dbDenyWrite wird verhindert, ' dass andere Benutzer Datensätze ändern oder ' hinzufügen können '* Die Option dbDenyRead verhindert, dass andere ' Benutzer Daten in Tabellen lesen können Set rst = CurrentDb.OpenRecordset(psTable, dbOpenDynaset, dbDenyWrite + dbDenyRead) IsTableDataOpen = (Err.Number <> 0) IsTableDataOpen_Exit: On Error GoTo 0 If Not rst Is Nothing Then rst.Close: Set rst = Nothing Exit Function End Function