Możliwe problemy:
1 równoczesne zmiany
Przyczyną może być to, że dany rekord został otwarty w formularzu, który edytujesz. Jeśli zmienisz rekord programowo podczas sesji edycji, a następnie spróbujesz zamknąć formularz (i tym samym spróbujesz zapisać rekord), Access powie, że rekord został zmieniony przez kogoś innego (oczywiście to Ty, ale Access nie wie ).
Zapisz formularz przed programową zmianą rekordu.
W formularzu:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 Brak klucza podstawowego lub sygnatury czasowej
Upewnij się, że tabela SQL-Server zawiera klucz podstawowy oraz kolumnę sygnatury czasowej.
Kolumna sygnatury czasowej pomaga programowi Access określić, czy rekord był edytowany od czasu ostatniego wybrania. Access robi to, sprawdzając wszystkie pola, jeśli nie jest dostępna sygnatura czasowa. Może to nie działa dobrze z wpisami zerowymi, jeśli nie ma kolumny sygnatury czasowej (patrz Problem z 3 bitami zerowymi ).
Znacznik czasu faktycznie przechowuje numer wersji wiersza, a nie godzinę.
Nie zapomnij odświeżyć linku do tabeli w programie Access po dodaniu kolumny sygnatury czasowej, w przeciwnym razie program Access go nie zobaczy. (Uwaga:Kreator rozbudowy firmy Microsoft tworzy kolumny sygnatury czasowej podczas konwertowania tabel programu Access na tabele SQL-Server.)
Problem z 3 pustymi bitami
Według @AlbertD.Kallal może to być problem z pustymi bitami opisany tutaj:KB280730
(ostatnia migawka na WayBackMachine, oryginalny artykuł został usunięty). Jeśli używasz pól bitowych, ustaw ich domyślną wartość na 0
i zastąp wszystkie NULL wprowadzone wcześniej przez 0
. Zwykle używam BIT DEFAULT 0 NOT NULL
dla pól logicznych, ponieważ najbardziej pasuje do idei logicznych.
Artykuł KB mówi, aby używać *.adp zamiast *.mdb; jednak Microsoft zakończył wsparcie dla Access Data Projects (ADP) w programie Access 2013 .