Rich-Text-Felder speichern Änderungen manchmal nicht
Nick Oetjen
Gesendet: 12.05.22 09:55
Betreff: RE: Rich-Text-Felder speichern Änderungen manchmal nicht


Member

Beiträge: 16


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!

 

Top of the page Bottom of the page