Möjliga problem:
1 samtidiga redigeringar
En anledning kan vara att posten i fråga har öppnats i en form som du redigerar. Om du ändrar posten programmatiskt under din redigeringssession och sedan försöker stänga formuläret (och därmed försöker spara posten) säger access att posten har ändrats av någon annan (det är såklart du, men Access vet inte ).
Spara formuläret innan du ändrar posten programmatiskt.
I formuläret:
'This saves the form's current record
Me.Dirty = False
'Now, make changes to the record programmatically
2 Saknar primärnyckel eller tidsstämpel
Se till att SQL-Server-tabellen har en primärnyckel samt en tidsstämpelkolumn.
Tidstämpelkolumnen hjälper Access att avgöra om posten har redigerats sedan den senast valdes. Access gör detta genom att inspektera alla fält, om ingen tidsstämpel är tillgänglig. Kanske fungerar det här inte bra med nollposter om det inte finns någon tidsstämpelkolumn (se 3 nollbitsproblem ).
Tidsstämpeln lagrar faktiskt ett radversionsnummer och inte en tid.
Glöm inte att uppdatera tabelllänken i access efter att ha lagt till en tidsstämpelskolumn, annars kommer Access inte att se den. (Obs! Microsofts guide för Upsizing skapar tidsstämpelkolumner när Access-tabeller konverteras till SQL-Server-tabeller.)
Problem med 3 nollbitar
Enligt @AlbertD.Kallal kan detta vara ett problem med nollbitar som beskrivs här:KB280730
(senaste ögonblicksbilden på WayBackMachine, den ursprungliga artikeln raderades). Om du använder bitfält, ställ in deras standardvärde till 0
och ersätt eventuella NULL-koder som angetts tidigare med 0
. Jag använder vanligtvis en BIT DEFAULT 0 NOT NULL
för booleska fält eftersom det stämmer bäst överens med idén om ett booleskt fält.
KB-artikeln säger att man ska använda en *.adp istället för en *.mdb; dock Microsoft avbröt stödet för Access Data Projects (ADP) i Access 2013 .