Hi,
ich vermute weiterhin, dass der betroffene Datensatz geöffnet und dadurch gesperrt ist. Auch das Formular popOrdRemarks darf nicht an die Grundtabelle gebunden sein. Du verwendest den Filter "ordID = " & lngOrdID , und daraus schließe ich, dass das PopUp gebunden ist.
Für Memo-Rich-Text auf dem Aufrufformular verwende ich ein OnClick-Ereignis, z.B.:
Private Sub Allgemeines_Hinweise_Kontext_Click()
CallMemofeld_editieren Screen.ActiveControl.Name
End Sub
Der entscheidene Teil ist nun, ein ungebundenes PopUp zu nutzen - fange am besten mit einem leeren Formular an, dann nur ein Textfeld, ein Ok-Button, ein Abbrechen-Button, und ausgeblendete Felder für eine ID oder so. Übergabe per OpenArgs. Kein eigenes Mitloggen, keine eigenen Sperrungen, etc. Das kann man einbauen, wenn der Rest läuft. Die Funktion sieht so aus:
Private Sub CallMemofeld_editieren(strAttributname As String)
' PDO: Memo-Felder können nicht einfach so geändert werden. Es wird ein Hilfsformular aufgerufen, und hier der Datensatz freigegeben, was entscheidend ist.
On Error Resume Next
' PDO: via OpenArgs Dim Bemerkungen_ungebunden_wg_Memo_book As String Dim Mandatneugewinnung_ID_book As Long Dim lngLaufendeNr As Long Dim lngSubnummer As Long
' PDO: Werte zwischenspeichern Bemerkungen_ungebunden_wg_Memo_book = Nz(Me.Controls(strAttributname), "" ) Mandatneugewinnung_ID_book = Me.Mandatneugewinnung_ID lngLaufendeNr = Me.Allgemeines_Laufende_Nummer lngSubnummer = Me.Allgemeines_Subnummer ' PDO: Um den Memo-Datensatz wieder freizugeben...: https://microsoft.public.de.access.narkive.com/DyDJRaPs/daten-werden... Me.Formularfuß.Visible = False ' PDO: Es irritiert sonst, wenn das Formular einen anderen Datensatz anzeigt. Wird von frm_040_070 wieder eingeblendet Me.Detailbereich.Visible = False Me.Formularkopf.Visible = False ' PDO: Datensatz wechseln, um ihn zu entsperren If Not Me.Form.Recordset.EOF Then Me.Form.Recordset.MoveNext Else Me.Form.Recordset.MovePrevious ' PopUp öffnen DoCmd.Close acForm, "frm_040_Kundenstamm_070_Neue_Mandate_Memo__anpassen" DoCmd.OpenForm "frm_040_Kundenstamm_070_Neue_Mandate_Memo__anpassen", , , , , acDialog, Bemerkungen_ungebunden_wg_Memo_book & vbTab & Mandatneugewinnung_ID_book & vbTab & strAttributname
Me.Form.Requery
DoEvents ' PDO: Wieder aufrufen Me.RecordsetClone.FindFirst ("[Allgemeines_Laufende_Nummer]=" & lngLaufendeNr & " AND [Allgemeines_Subnummer]=" & lngSubnummer & "" ) If Not Me.RecordsetClone.NoMatch Then Me.Bookmark = Me.RecordsetClone.Bookmark Me.Controls(strAttributname).SetFocus
End Sub Das PopUp , bei mir hier "frm_040_Kundenstamm_070_Neue_Mandate_Memo__anpassen" , macht i.w. folgendes: (Me.Bemerkungen ist das Textfeld, die anderen beiden zur Identifikation) Private Sub Form_Load()
On Error Resume Next
' PDO: OpenArgs sind Tab-separated If Not Nz(Me.OpenArgs, "" ) = "" Then Me.Bemerkungen.Value = Nz(Split(Me.OpenArgs, vbTab)(0), "Es ist leider ein Fehler aufgetreten. Bitte klicken Sie auf 'Abbrechen' und versuchen es erneut." ) lngMandatneugewinnung_ID_book = Nz(Split(Me.OpenArgs, vbTab)(1), 0) strAttributname = Nz(Split(Me.OpenArgs, vbTab)(2), "" ) Else
Me.Bemerkungen.Value = "Es ist leider ein Fehler aufgetreten. Bitte klicken Sie auf 'Abbrechen' und versuchen es erneut." lngMandatneugewinnung_ID_book = 0 strAttributname = "" End If
End Sub Und dann gibt es auf dem PopUp den OK-Button: Private Sub btnEdit_Bemerkung_Click()
On Error Resume Next
Dim strSQL As String
strSQL = "UPDATE T_060_xyz AS stamm " strSQL = strSQL & "SET stamm." & strAttributname & " ='" & Me.Bemerkungen.Value & "'" strSQL = strSQL & " WHERE (stamm.Mandatneugewinnung_ID=" & lngMandatneugewinnung_ID_book & " )" strSQL = strSQL & ";" DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True If Err.Number <> 0 Then PDOMsg 0, "Es ist ein Fehler aufgetreten: " & vbCrLf & vbCrLf & Err.Description Else Befehl134_Click End If
End Sub Der genannte Befehl134_Click ist der Schliessen-Button, und blendet nur das Aufrufformular wieder ein, welches beim PopUp-Aufruf weggeblendet wurde: Private Sub Befehl134_Click()
On Error Resume Next Forms("frm_040_Kundenstamm_070_Neue_Mandate_Gesamtvorgang" ).Formularkopf.Visible = True Forms("frm_040_Kundenstamm_070_Neue_Mandate_Gesamtvorgang" ).Detailbereich.Visible = True Forms("frm_040_Kundenstamm_070_Neue_Mandate_Gesamtvorgang" ).Formularfuß.Visible = True DoCmd.Close acForm, Me.Form.Name
End Sub Viel Erfolg!
|