Access Fehlermeldung 'Schreibkonflikt'

Hallo,

ich habe in einem Access Formular einen Button kreiert, der in dem Formular eine laufende Nummer generieren soll. Beim Klicken auf diese Schlatfläche passier erst einmal gar nichts, erst wenn ich auf die Recorder-Icons zum Navigieren zwischen Datensätzen klicke, erscheint folgende Meldung:


Schreibkonflikt

Dieser Datensatz wurde seit Beginn der Bearbeitung von einem anderenBenutzer geändert.
Wenn Sie den Datensatz speichern, werden Sie die Änderungen des anderen Benutzers
überschreiben.

Kopieren Ihrer Änderungen in die Zwischenablage ermöglicht es Ihnen, die Änderungen des
anderen Benutzers anzusehen und dann Ihre Änderungenen einzufügen, wenn Sie es
wünschen.

|Datensatz speichern| |In Zwischenablage kopieren| |Eigene Änderungen verwerfen|


wenn ich dann auf Datensatz speichern klicke, passiert nichts (oder im schlimmsten Fall eine Fehlermeldung, die nicht mehr weggeht und das ganze zum Absturz bringt), für die anderen beiden schlatflächen wird dann endlich die laufende Nummer generiert.

Ist das nun ein Access Problem oder hat das etwas mit dem VBA Code zu tun?
Hoffe mir kann da jemand helfen,
viele Grüße,
Laura

Hallo, Laura!


Schreibkonflikt […]

Die Meldung nervte mich auch schon…

Ist das nun ein Access Problem oder hat das etwas mit dem VBA
Code zu tun?

Das ist eine Mischung aus beidem, aber nicht wirklich ein Access-Problem, sondern ein Fehler oder eine Ungenauigkeit Deines Programms. Ein Datensatz wird durch zwei verschiedene „Prozesse“ geändert.

Beispiele: Du hast ein Formular offen, Du machst irgendwas damit und im Hintergrund rufst Du eine Aktualisierungsabfrage auf, die genau den gleichen Datensatz ändert.

Oder Du hast ein Formular offen und gleichzeitig ein Recordset-Objekt auf diesen Datensatz. Beide wollen was ändern, ergo: gleiche Meldung.

Oder Du hast zwei Formulare offen (oder ein Formular und ein Unterformular), und beide manipulieren am gleichen Datensatz…

Du siehst, Möglichkeiten gibt es viele. Schau mal genauer nach, was Du wann wie machst…

Gruß, Manfred

Hallo Manfred,

hier erst mal der Code:

Private Sub Befehl23_Click()
Dim SQL As String
Dim BlockSplitRS As DAO.Recordset
Dim Zaehler As Integer

Gesellschaft.SetFocus
ges = Gesellschaft.Text

Projekt.SetFocus
Proj = Projekt.Text

PLZ.SetFocus
PLZ = PLZ.Text

Item.SetFocus
Item = Item.Text

Modul.SetFocus
Modul = Modul.Text

SQL = „SELECT * FROM BlockSplit WHERE Gesellschaft= '“ + ges + „’ AND Projekt =’“ + Proj + „‚AND PLZ =‘“ + PLZ + „’ AND Item =’“ + Item + „’ ORDER BY Gesellschaft,Projekt,Item,Modul“

Set BlockSplitRS = CurrentDb.OpenRecordset(SQL)

Zaehler = 0
If Not BlockSplitRS.EOF Then BlockSplitRS.MoveFirst

Do While Not BlockSplitRS.EOF
BlockSplitRS.Edit
Zaehler = Zaehler + 1
If BlockSplitRS!LFDNR > " " Then
Else
BlockSplitRS!LFDNR = Zaehler
End If

BlockSplitRS.Update

BlockSplitRS.MoveNext

Loop

BlockSplitRS.Close

End Sub

Beispiele: Du hast ein Formular offen, Du machst irgendwas
damit und im Hintergrund rufst Du eine Aktualisierungsabfrage
auf, die genau den gleichen Datensatz ändert.

Oder Du hast ein Formular offen und gleichzeitig ein
Recordset-Objekt auf diesen Datensatz. Beide wollen was
ändern, ergo: gleiche Meldung.

Ja, das Formular das geändert werden soll, ist beim generieren geöffnet.
jedoch habe ich an anderer Stelle in der Datenbank fast das gleiche gemacht:
In einem Formular ist eine Schaltfläche und der dahinterliegende Code scrheibt Werte in eben das selbe Formular. Da gab es aber keine Probleme…

Viele Grüße,
Laura

Hallo, Laura!

Private Sub Befehl23_Click()
Dim SQL As String
Dim BlockSplitRS As DAO.Recordset
Dim Zaehler As Integer

Ah ja, wie vermutet:wink:

Projekt.SetFocus

Gut, lass das mal probeweise weg. Kann sein, dass allein durch das Fokus-verschieben Access meint, den Datensatz auf Dirty (also „geändert“) setzen zu müssen. Brauchst Du nicht.

SQL = „SELECT * FROM BlockSplit WHERE Gesellschaft= '“ + ges

Hängt Dein Formular an der Tabelle BlockSplit dran?

Dann als Idee: Wenn Du während der folgenden Schleife eh nichts machst im Formular: Entweder machst Du vorm OpenRecordset ein

DoCmd.RunCommand acCmdSaveRecord

(um die Eingaben im Formular zu speichern) oder Du löschst während der Aktualisierungsschleife die Datenherkunft Deines Formulars und setzt sie nach der Schleife wieder:

Dim strRecordSource
strRecordSource = Me.RecordSource
Me.RecordSource = ""
'... jetzt Deine Schleife, und am Ende:
Me.RecordSource = strRecordSource

Ggf. musst Du Dir dann noch merken, auf welchem Datensatz Du warst. Siehe dazu auch Bookmark-Eigenschaft vom Formular…

Gruß, Manfred

Hallo Manfred,

wahnsinn, mit
DoCmd.RunCommand acCmdSaveRecord
hat es jetzt sofort geklappt!!
Vielen vielen Dank, da hab ich mich schon lange drüber geärgert :wink:

Viele Grüße,
Laura