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;
Legal Eduardo..... mas virei e mexi e nao consegui montar uma rotina decente para gerenciar meus erros utilizando FDQuery. Tem como postar um exemplo de utilização?
ResponderExcluirBoa tarde,
ResponderExcluirConforme descrito no exemplo acima, ao dar um applyUpdates no FDQuery1 o mesmo retorna um Integer informando se deu erro ou não. Após isso percorremos as linhas do FDQuery1 onde podemos verificar cada erro ocorrido em cada linha do FDQuery1.
Não entendi qual sua dificuldade referente ao exemplo acima, você pode ser mais especifico ?
Desde já agradeço, fico muito feliz em ajuda-lo.
Camara! Estou passando o diabo tentando fazer uma factura com Xe7+ Firedac+FB30 c/chachedUpdates que possa se estornar/anular uma Fatura/Recibo
ResponderExcluirTenho 3 tabelas HeaderInv P_KEY=INVNO_ID+SINAL
DetailINV com P_KEY=INVNO_ID+SINAL+NOLI e por fim ResumoImposto PKKEY=INVNO_ID+SINAL+NOLI se limita arrumar resumo do impostos a 10%; 16%,;23%; etc
O diabo quando muda o Sinal de mais para menos na copia do mesmo INVNO_ID (uma Flag="E" não pertence à chave). É que dá sempre chave duplicada!?.
Mas não tem como porque: mantenho um registo positivo e copio ele com sinal menos seted hardecode e valores=valores *-1. C/Flag"E"storno!
Já passou por semelhante coisa
Bom dia. Qual framework você utilizava para conectar ao banco anteriormente?
ExcluirEsse exemplo foi muito útil para mim. Parabéns e obrigado pelo compartilhamento.
ResponderExcluirFantástico exemplo...
ResponderExcluirexatamente o que eu estava procurando...
Muito obrigado!!
$UC3$$@