In dem alten Code sind solche Sachen drin, wie
TabelleXYZ.LockTable(ltWriteLock)
bzw. UnLockTable(). Dies Locks sind in der alten
Unit DBTables drin.
Aber die gibt es ja nicht mehr. FireDAC hat da scheinbar nix Passendes,
Nein, Locking geht einfach nicht mehr. FireDAC geht da einen anderen Ansatz, so nach dem Motto: Mach erst mal und reagiere, wenn es nicht klappt.
Wenn ein geänderter Datensatz gespeichert wird, kann man über
UpdateMode entscheiden, welche Felder in der WHERE Klausel angegeben werden. Bei
upWhereAll werden alle abgerufenen Felder eingesetzt. Damit kann man sicherstellen, dass zwischenzeitlich keines der Felder verändert wurde. Bei
upWhereChanged sind das nur die Felder, die man selbst verändert hat. Das lässt sich noch über die
ProviderFlags in jedem einzelnen Feld feintunen.
Schlagt nun ein solches Update fehl, weil z.B. ein Feld von anderer Stelle verändert wurde, kann man im
OnReconcileError der
Query entsprechend darauf reagieren.