Wenn ich das recht verstanden habe, bedeutet die Fehlermeldung, dass (mindestens) zwei Änderungen an dem gleichen Datensatz durchgeführt werden soll(t)en. Wenn es eine Sperre gibt, so kann es sich hierbei um einen Vorgang von Millisekunden handeln. Wenn Du also die Fehlermeldung bekommst und in der
DB nachschaust, kann die Sperre schon längst wieder aufgehoben sein. Die Chance die konkrete Sperre zu "sehen" tendiert daher zuweilen gegen 0.
Andererseits: Wenn alle Felder beim Update geprüft werden, kann diese Fehlermeldung auch auftreten. Das beutet aber nicht, dass es tatsächlich eine Sperre gibt, sondern nur: Der Datensatz ist in der
DB jetzt anders als er zum Zeitpunkt, zu dem die Daten gelesen wurden, anders war. So 'ne richtige Sperre liegt da nicht vor, sondern eine Fehlermeldung, die textlich eher irreführend sein könnte.
Ursache ist in der Regel, dass tatsächlich der bereffende Datensatz geändert wurde.
In Deinem Szenario kannst Du aber auch selbst der sperrende User sein.
Es wird im Grid was geändert. Was ich nicht weiß und das Du mal prüfen solltest: Wird nur der gerade geänderte Datenatz in Richtung
DB geschickt oder eventuell alle im Grid angezeigten Sätze? Hierdurch könnten eventuell Inkonsistenzen zwischen den Daten im Grid und der
DB entstehen. Wäre zwar extrem unangenehm (und sicherlich in Richtung (gravierender) Bug einzuordnen), aber absolut ausschließen würd' ich das erstmal nicht.
Versuchter Workaround: Wenn im Grid ein Satz geändert wurde: Nach dem Post ein
Query.Refresh einbauen, so dass die Daten neu aus der
DB gelesen werden. Ist performenstechnisch sicherlich suboptimal, aber um zu prüfen, ob der Fehler dann weg ist, sicherlich erstmal geeignet. Wird der Fehler so behoben, kannst Du dann zumindest etwas gezielter weiter nach der eigentlichen Ursache suchen.
Gibt es auf der Datenbank irgendwelche Trigger, die ggfls. für veränderte Daten zuständig sein könnten, aber nicht grundsätzlich Daten ändern, sondern nur unter bestimmten Bedingungen, so dass der Fehler nicht immer auftreten muss?
Bei dem Klick im Grid wird die Änderung (vermutlich) nicht sofort Richtung Datenbank geschickt, sondern erst, wenn Post aufgerufen wird. Das passiert, wenn man z. B. in 'nem DBNavigator den entsprechenden Button drückt oder wenn man den Datensatz wechselt.
Kannst Du sowas in Deinem Programm mal machen?
Erst Checkbox klicken, dann explizit ein Post aufrufen, dann den Datensatz wechseln und dann die zweite Checkbox klicken? Tritt der Fehler dann immernoch (sporadisch) auf?