Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bearbeiten von Datensatzproblemen in Access / SQL (Schreibkonflikt)

Mögliche Probleme:

1 gleichzeitige Bearbeitungen

Ein Grund kann 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 programmatisch ändern.
Im Formular:

'This saves the form's current record
Me.Dirty = False

'Now, make changes to the record programmatically

2 Fehlender Primärschlüssel oder Zeitstempel

Stellen Sie sicher, dass die SQL-Server-Tabelle sowohl einen Primärschlüssel als auch eine Zeitstempelspalte 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.)

Problem mit 3 Nullbits

Laut @AlbertD.Kallal könnte dies ein Problem mit Nullbits sein, das hier beschrieben wird: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 NULLen durch 0 . Normalerweise verwende ich ein 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; jedoch Microsoft hat die Unterstützung für Access Data Projects (ADP) in Access 2013 eingestellt .