Quando invocamos o método ApplyUpdates em uma FDQuery devemos lembrar que exceções não serão geradas para a aplicação, porem o FireDac registra o erro em uma estrutura de registro de dados interna e continua a processar atualizações até que o número de erros seja igual ou superior a AMaxErrors.
Após chamar o método ApplyUpdates , devemos incluir rtHasErrors em FilterChanges para filtrarmos os registros que contenham erros. Em seguida, navegamos através do conjunto de dados e lemos a propriedade RowError que conterá um objeto de exceção associado ao registro atual. Como mostra o exemplo abaixo:
var
oErr: EFDException; begin if FDQuery1.ApplyUpdate > 0 then begin FDQuery1.FilterChanges := [rtModified, rtInserted, rtDeleted, rtHasErrors]; try FDQuery1.First; while not FDQuery1.Eof do begin oErr := FDQuery1.RowError; if oErr <> nil then begin raise Exception.Create(oErr.Message); end; FDQuery1.Next; end; finally FDQuery1.FilterChanges := [rtUnmodified, rtModified, rtInserted]; end; end;