Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Kann Datensatz nicht ändern oder löschen

Begonnen von Carl, November 01, 2017, 19:26:50

⏪ vorheriges - nächstes ⏩

Carl

Mal ne Frage

Ich arbeite allein in einer Datenbank.

Ab und zu bekomme ich scheinbar spontan bei einem bestimmten Feld die Meldung, dass der DS von jemandem anderen zwischenzeitlich geändert wurde und ob ich das überschreiben möchte. Wenn ich ja wähle:

Erhalte ich in einem Formular scheinbar die Nachricht, dass der DS jetzt nicht geändert werden kann, weil andere Datensätze sich noch darauf beziehen. Danach kommen mehrfach Fehlermeldungen und schließlich bekomme ich die Option, das Formular zu schließen.

Wenn ich das schließe, dann das Formular erneu öffne, funktioniert alles ganz wieder normal, auch in diesem Datensatz.

Auf welchen Fehler könnte so ein Phänomen hindeuten?

Carl


MzKlMu

Hallo,
das kann vorkommen, wenn ein gebundenes Formular verwendet und trotzdem versucht außerhalb des Formulars Daten zu ändern.
Oder bei einem gebundenen Formular wenn man versucht über ein Recordset zu speichern, es gibt viele Fehlerquellen.
Gruß Klaus

Carl

Meine erste Idee wäre, alle diese Fehlermeldungen zu unterdrücken und einfach so zu tun, als hätte es niemand bemerkt.

Gibt es da einen Code dazu, der sowas sehr zuverlässig unterdrückt? Eventuell schließt und gleich wieder öffnet?

Carl

Carl

Ich habe jetzt heraus bekommen, dass ich die Fehler nicht bekomme, wenn ich die Option wähle: "Eigene Änderungen verwerfen" und dann nochmal eingebe. Das würde ich gern automatisieren und ne Meldung ausgeben: "Änderungen mussten verworfen werden, bitte erneut eingeben."

Kann man sowas machen in VBA?

Bei Fehler: Änderung verwerfen und msgbox ausgeben?

Als dem gesamten Formular zugrundeliegender Befehl?

ebs17

ZitatGibt es da einen Code dazu, der sowas sehr zuverlässig unterdrückt?
On Error Application.Quit
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
Du machst in der Programmierung bzw. im Steuerungsablauf einen Fehler. Es ist ganz sicher der falsche Weg die Änderungen zu verwerfen und die Daten noch mal einzugeben.
Du musst die Ursache bekämpfen, nicht die Symptome.
Gruß Klaus

Carl

Da stimme ich Dir zu.

Ich kann es nur nicht. Und ich weiß auch nicht, wo der Fehler liegt. Ich kriegs nicht raus.

MzKlMu

Hallo,
wie speicherst Du Datensätze ?
Verwendest Du gebundene Formulare ?
Gruß Klaus

Carl

#8
Nein, die Formulare sind nicht untereinander gebunden. Nur an ihre Quelle eben, Abfragen.

Ich hatte ein UFO auf der selben Abfrage basierend gehabt wir das HF, das habe ich jetzt mal geändert. Mal sehen obs besser wird.

Ich wäre Dir aber wirklich Dankbar über einen Schnipsel, der Fehlermeldungen aller Art unterdrückt und statt dessen das Formular kurz kommentarlos schließt und wieder öffnet.

MzKlMu

Hallo,
ZitatIch wäre Dir aber wirklich Dankbar über einen Schnipsel, der Fehlermeldungen aller Art unterdrückt
habe ich leider keinen.
Gruß Klaus

Frithjiof

#10
ZitatIch wäre Dir aber wirklich Dankbar über einen Schnipsel, ....
Mit diesem kleinen Sub sollte das gehen.
Private Sub Form_AfterUpdate()
    On Error GoTo suberr
    Exit Sub
suberr:
    If Err.Number = ??? Then
        Me.Undo
    Else
        MsgBox Err.Number & " " &  Err.Description
    End If
    Err.Clear
End Sub




MzKlMu

@Frithjiof
Bitte keine vollständigen Beiträge zitieren.
Und verwende für Codedarstellungen die Codetags nicht die Tags für Hoch/Tief gestellt.
Die Codetags verhindern Textverfälschungen (wie z.B. Smileys).
Ich habe es oben geändert.
Gruß Klaus

Lachtaube

@Frithjiof,

Dein Code-Fragment ist leider völlig sinnfrei.
Grüße von der (⌒▽⌒)

Frithjiof

#13
@Lachtaube
Richtig, aber so sollte es gehen

Ein Button <btnOK> ins Formular einfügen und:


Private Sub btnOK_Click()
    On Error GoTo suberr
    DoCmd.RunCommand acCmdSaveRecord
    Exit Sub
suberr:
    If Err.Number = ??? Then
        Me.Undo
    Else
        MsgBox Err.Number & " " &  Err.Description
    End If
    Err.Clear
End Sub


oder so versuchen


Private Sub Form_Error(DataErr As Integer, Response As Integer)
   If  DataErr = ???
        Response = acDataErrContinue
        Me.Undo
    endif
End Sub


Alternativ könnte auch noch sowas versucht werden


Private Sub Form_Dirty(Cancel As Integer)
        on error goto suberr           
        DoCmd.RunCommand acCmdSaveRecord
     exit sub
suberr:
    Cancel = True
End Sub


Lachtaube

Frithjiof, Du stocherst im Nebel. Ich würde ja einmal abwarten, und Carl die genaue Ausgangslage nebst Code (der vermutlich für die Ungereimtheiten sorgt) berichten lassen.

PS: Bei mehr als einem Pflichtfeld wäre auch der zuletzt gezeigte Code nicht von Erfolg gekrönt.
Grüße von der (⌒▽⌒)