Tipp 2.11 - Datensatz gesperrt
Wie kann ich ermitteln, ob der aktuelle Datensatz im Formular gesperrt ist?
Mit dieser Funktion können Sie ermitteln, ob der aktuelle Datensatz im Formular gesperrt ist. 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:
Public Function A2XWhoHasLockedRst(pFrm As Form) As Boolean '// ===================================================== '// Methode | Überprüft, ob der aktuelle DS im Formular ' für die Bearbeitung gesperrt ist '// ----------------------------------------------------- '// Parameter | pfrm - aktuelle Form '// ----------------------------------------------------- '// Rückgabe | Boolean - True=gesperrt '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispielaufruf: z.B. über eine Befehlsschaltfläche '// Beim Klicken: =A2XWhoHasLockedRst(Formulare([Name])) '// ===================================================== Dim rst As DAO.Recordset Dim blnMUError As Boolean Dim sUser As String Dim sMachine As String Dim sMsg As String On Error GoTo HandleErr ' Standardnachricht sMsg = "Datensatz ist derzeit nicht gesperrt!" ' Dupliziere die Datensatzherkunft des Formulars und ' setze ein Lesezeichen auf den aktuellen Datensatz Set rst = pFrm.RecordsetClone rst.Bookmark = pFrm.Bookmark ' Falls der aktuelle Datensatz gesperrt ist, folgt hier ' an nächster Stelle ein Fehler den wir in der Fehler- ' behandlung abhandeln rst.Edit ExitHere: ' Gebe Prüfstatus aus! MsgBox sMsg, vbInformation, "Sperr-Status" If Not rst Is Nothing Then rst.Close: Set rst = Nothing Exit Function HandleErr: ' Überprüfe die Fehlermeldung und geben ggf. den ' Name des Benutzer aus, falls zu ermitteln ist If Err.Number = 3188 Then ' DS gesperrt durch den Computer / der Applikation sMsg = "Datensatz wurde durch einen anderen Bereich " _ & "innerhalb der Anwendung gesperrt." A2XWhoHasLockedRst = True Else sMsg = "Problem: Fehler " & Err.Number & vbCrLf & _ Err.Description blnMUError = A2XGetUserMachine(Err.Description, _ sUser, sMachine) ' Wenn die Rückgabe wahr ist, konnte die Funktion ' A2XGetUserMachine ermitteln, wer den Datensatz ' gesperrt hat. Falls nicht, ist der Datensatz nicht ' gesperrt und ein anderes Problem ist aufgetreten If blnMUError Then sMsg = "Datensatz derzeit gesperrt von: " & sUser & _ vbCrLf & "am Computer: " & sMachine & "." A2XWhoHasLockedRst = True End If End If Resume ExitHere End Function Public Function A2XGetUserMachine(ByVal psErrMsg As String, _ ByRef psUser As String, _ ByRef psMachine As String) _ As Boolean '// ===================================================== '// Methode | Hilfsfunktion, um den Benutzer ggf. aus ' der Fehlermeldung zu ermitteln. '// ----------------------------------------------------- '// Parameter | psErrMsg - Fehlermeldung ' psUser - Leerstring für die Übergabe ' psMachine - dito s.o. '// ----------------------------------------------------- '// Rückgabe | Boolean - Ja/gesperrt Nein/frei '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ===================================================== Dim iUserPos As Integer Dim iMachinePos As Integer Const csUSER_STRING As String = " von Benutzer " Const csMACHINE_STRING As String = " auf Computer " On Error GoTo A2XGetUserMachine_Error A2XGetUserMachine = False On Error Resume Next iUserPos = InStr(psErrMsg, csUSER_STRING) If iUserPos > 0 Then iMachinePos = InStr(psErrMsg, csMACHINE_STRING) If iMachinePos > 0 Then psUser = Mid$(psErrMsg, _ iUserPos + Len(csUSER_STRING), _ iMachinePos - (iUserPos + Len(csUSER_STRING) - 1)) psMachine = Mid$(psErrMsg, _ iMachinePos + Len(csMACHINE_STRING), _ (Len(psErrMsg) - iMachinePos - _ Len(csMACHINE_STRING))) End If A2XGetUserMachine = True End If A2XGetUserMachine_Exit: On Error GoTo 0 Exit Function A2XGetUserMachine_Error: Select Case Err.Number Case Else MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "modData.A2XGetUserMachine" End Select Resume A2XGetUserMachine_Exit End Function