Възможни проблеми:
1 едновременна редакция
Причината може да е, че въпросният запис е бил отворен във формуляр, който редактирате. Ако промените записа програмно по време на вашата сесия за редактиране и след това се опитате да затворите формуляра (и по този начин се опитате да запазите записа), access казва, че записът е променен от някой друг (разбира се, това сте вие, но Access не знае ).
Запазете формуляра, преди да промените записа програмно.
Във формуляра:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 Липсващ първичен ключ или клеймо за време
Уверете се, че таблицата на SQL-Server има първичен ключ, както и колона с клеймо за време.
Колоната с клеймо за време помага на Access да определи дали записът е бил редактиран след последното му избиране. Access прави това, като проверява всички полета, ако няма наличен времеви печат. Може би това не работи добре с нулеви записи, ако няма колона с клеймо за време (вижте Проблем с 3 нулеви бита ).
Времето всъщност съхранява номер на версия на ред, а не време.
Не забравяйте да опресните връзката към таблицата в access, след като добавите колона с клеймо за време, в противен случай Access няма да я види. (Забележка:Съветникът за увеличаване на размера на Microsoft създава колони с клеймо за време, когато преобразува таблици на Access в таблици на SQL-Server.)
Проблем с 3 нулеви бита
Според @AlbertD.Kallal това може да е проблем с нулеви битове, описан тук:KB280730
(последна моментна снимка на WayBackMachine, оригиналната статия беше изтрита). Ако използвате битови полета, задайте тяхната стойност по подразбиране на 0
и заменете всички въведени преди това NULL с 0
. Обикновено използвам BIT DEFAULT 0 NOT NULL
за булеви полета, тъй като най-много съответства на идеята за булеви стойности.
В статията от KB се казва да се използва *.adp вместо *.mdb; обаче Microsoft прекрати поддръжката на Access Data Projects (ADP) в Access 2013 .