Quem salvar por último, ganhou. É assim que funciona a maioria das aplicações de banco de dados. E também é assim que o Firedac é configurado por padrão. Ele não verifica se os dados mudaram nesse ínterim. Em muitas aplicações de banco de dados, nada é feito com isso. Às vezes você se depara com aplicações com um sistema elaborado e personalizado para resolver este problema. Mas o Firedac tem uma opção com a qual você pode facilmente evitar isto, ou seja, UpdateMode nas Opções de Atualização.
Há três configurações possíveis que resolvem este problema através da cláusula WHERE da consulta de atualização.
Se um update falhar, Firedac levanta uma EFDException. O tratamento disto fica, no entanto, a seu critério. No entanto, ele evita facilmente que os dados sejam sobregravados – para surpresa dos usuários.
Naturalmente, você também pode resolver este problema com o travamento, embora haja diferenças. Com o travamento, você depende do que um banco de dados suporta nisto. A desvantagem do travamento também é que ninguém mais pode escrever na tabela ou registrar, desde que você o tenha travado. E, dependendo de suas configurações, nem mesmo lê-lo. Isto muitas vezes proporciona situações em que os usuários têm uma má experiência de desempenho, porque as consultas estão esperando que os registros sejam liberados.
Com o UpdateOptions.UpdateMode, isto pode ser tratado de uma maneira relativamente simples em uma aplicação existente. Se você definir a opção no nível de conexão, ela se aplica a todos os comandos por padrão, mas você também pode começar a definir isto por consulta ou tabela. Isto também permite uma abordagem gradual.
Contato