Ausgabe
ein Problem ist aufgetreten, nachdem eine von mir verwendete SQL-Datenbank auf einen neuen Server migriert wurde. Wenn Sie jetzt versuchen, einen Datensatz in Access (Formular oder Tabelle) zu bearbeiten, heißt es:WRITE CONFLICT: This record has been changed by another user since you started editing it...
Gibt es irgendwelche nicht offensichtlichen Gründe dafür. Niemand sonst verwendet den Server, ich habe alle Trigger auf dem Tisch deaktiviert. Ich habe gerade festgestellt, dass es etwas mit NULLen zu tun hat, da Datensätze, die keine haben, in Ordnung sind, aber einige Zeilen, die NULLen haben, sind es nicht. Kann es an Indizes liegen? Wenn es relevant ist, habe ich kürzlich mit dem täglichen BULK-Upload begonnen, anstatt es einzeln mit INSERT INTO von Access zu tun.
Lösung
Mögliche Probleme:
1 Gleichzeitige Bearbeitungen
Ein Grund könnte sein, dass der betreffende Datensatz in einem Formular geöffnet wurde, das Sie gerade bearbeiten. Wenn Sie den Datensatz während Ihrer Bearbeitungssitzung programmgesteuert ändern und dann versuchen, das Formular zu schließen (und somit versuchen, den Datensatz zu speichern), sagt Access, dass der Datensatz von jemand anderem geändert wurde (natürlich Sie, aber Access weiß es nicht ).
Speichern Sie das Formular, bevor Sie den Datensatz programmgesteuert ändern.
In der Form:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 Primärschlüssel oder Zeitstempel fehlen
Stellen Sie sicher, dass die SQL-Server-Tabelle sowohl einen Primärschlüssel als auch eine Timestamp-Spalte hat.
Mithilfe der Zeitstempelspalte kann Access feststellen, ob der Datensatz seit seiner letzten Auswahl bearbeitet wurde. Access überprüft dazu alle Felder, wenn kein Zeitstempel verfügbar ist. Möglicherweise funktioniert dies nicht gut mit Nulleinträgen, wenn es keine Zeitstempelspalte gibt (siehe Problem mit 3 Nullbits ).
Der Zeitstempel speichert tatsächlich eine Zeilenversionsnummer und keine Zeit.
Vergessen Sie nicht, den Tabellenlink in Access zu aktualisieren, nachdem Sie eine Zeitstempelspalte hinzugefügt haben, da Access ihn sonst nicht sieht. (Hinweis: Der Upsizing-Assistent von Microsoft erstellt beim Konvertieren von Access-Tabellen in SQL-Server-Tabellen Zeitstempelspalten.)
3 Null-Bit-Problem
Laut @AlbertD.Kallal könnte dies ein hier beschriebenes Null-Bit-Problem sein: KB280730 (letzter Schnappschuss auf WayBackMachine, der ursprüngliche Artikel wurde gelöscht). Wenn Sie Bitfelder verwenden, setzen Sie deren Standardwert auf 0
und ersetzen Sie alle zuvor eingegebenen NULL-Werte durch 0
. Normalerweise verwende ich a BIT DEFAULT 0 NOT NULL
für boolesche Felder, da es der Idee eines booleschen Werts am ehesten entspricht.
Der KB-Artikel sagt, dass man eine *.adp anstelle einer *.mdb verwenden soll; Allerdings hat Microsoft die Unterstützung für Access Data Projects (ADP) in Access 2013 eingestellt .
Beantwortet von – Olivier Jacot-Descombes
Antwort geprüft von – Jay B. (FixError Admin)