Como fazer essa verificação?

Delphi

24/06/2009

Criei no meu sistema uma tabela de log, gravo nessa tabela todos os registros que foram exlcuidos. Porém quando há alguma excessão de erro do banco de dados e o registro não é excluido devido essa exceção continua gravando na tabela de log pq coloquei os comandos de inserção na tabela de log nos botões exclusões. Como eu faço para verificar no ato da exclusão se houve excessão, caso tenha tido não deixar incluir na tabela de log. meu código é esse:

if application.messagebox(´Deseja excluir este Registro?´,´Confirmar
exclusão?´,mb_iconquestion+mb_yesno) = mrYes then
if dm.cdsauditoria.applyUpdates(0) >= 0 then
begin
dm.cdscadlocador.delete;
dm.cdscadlocador.appluUpdates(0);

end
else
//aqui coloco os comandos de inclusão na tabela de auditoria.

end;
end;


Vandeir

Vandeir

Curtidas 0

Respostas

.lg.

.lg.

24/06/2009

Já ouviu falar em variável [b:cb5e3dc23c]booleana[/b:cb5e3dc23c]!?
boValida: Boolean

Então.
Se for True... Grava no log. Se for False... Não grava no log.
Pego!?

Por padrão sete-a pra True. Se rolar a exceção... Sete-a pra false.
:wink:

Qualquer dúvida, postae.
.LG.


GOSTEI 0
Danielrsanches

Danielrsanches

24/06/2009

pra isso serve o try...except ...

try NOME_DA_TABELA.DELETE
...aqui os comandos para salvar no log, sendo que excluiu o registro...
except on E: Exception do
begin
showmessage(´Erro ao excluir registro.´+#13+E.Message);
...aqui os comandos que desejar, sendo que não excluiu ...
end;
end;


abraços !!


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

24/06/2009

o try..except não funciona para o ApplyUpdates do CDS.
será necessário implementar o evento OnReconcileError do CDS. lá você saberá se houve erro e daí pode executar sua rotina de LOG.

pode ser com variável boleana. algo assim:

no DM implemente o evento OnReconcileError do CDS:
procedure Datamodule1.cdsCadLocadorReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  lErro := True; // variável pública do DM
end;


no seu botão de exclusão:
if application.messagebox(´Deseja excluir este Registro?´,´Confirmar
exclusão?´,mb_iconquestion+mb_yesno) = mrYes then
begin
  dm.lErro := False;
  dm.cdscadlocador.delete;
  dm.cdscadlocador.ApplyUpdates(0);
  if not dm.lErro then // se não deu erro na exclusão, adiciono ao LOG
    //aqui coloco os comandos de inclusão na tabela de auditoria.
end;



GOSTEI 0
POSTAR