Será que é algum tipo de bug no DBExpress
Olá,
Estou desenvolvendo um sistema onde tenho várias tabelas. E em algumas estou percebendo algo estranho. É o seguinte: tenho uma tela de cadastro de cidades e uma outra de clientes. E cada cliente pertence a uma cidade. E quando eu deleto uma cidade, que existe algum cliente, o sistema não está fazendo nada, nem emitindo alguma mensagem de erro, ou não está gravando. Pela lógica seria para o sistema dar algum aviso, mesmo com a mensagem default do delphi. Por que tipo, qaundo eu tento excluir pelo ibexpert a referida cidade, o mesmo me retorna um erro de violação de chave estrangeira. Era mais ou menos esse tipo de erro que era para ser mostrado na aplicação. Estou utilizando o dbexpress com firebird 2.0 e com componentes da paleta datacontrols.
E esse é o código que eu estou inserindo no botão deletar:
Alguém sabe por que está ocorrendo isso? E qual seria a solução para o meu caso?
Até mais.
Estou desenvolvendo um sistema onde tenho várias tabelas. E em algumas estou percebendo algo estranho. É o seguinte: tenho uma tela de cadastro de cidades e uma outra de clientes. E cada cliente pertence a uma cidade. E quando eu deleto uma cidade, que existe algum cliente, o sistema não está fazendo nada, nem emitindo alguma mensagem de erro, ou não está gravando. Pela lógica seria para o sistema dar algum aviso, mesmo com a mensagem default do delphi. Por que tipo, qaundo eu tento excluir pelo ibexpert a referida cidade, o mesmo me retorna um erro de violação de chave estrangeira. Era mais ou menos esse tipo de erro que era para ser mostrado na aplicação. Estou utilizando o dbexpress com firebird 2.0 e com componentes da paleta datacontrols.
E esse é o código que eu estou inserindo no botão deletar:
try DM.cdsCidades.Delete; DM.cdsCidades.Active := False; MessageDlg(´Operação efetuada com sucesso!!!´, mtInformation, [mbOK],0); inherited; except on E : Exception do begin MessageDlg(´Existem referência a essa cidade. Favor verificar antes da exclusão.´, mtError, [mbOK], 0); Abort; end; end; end; E no evento afterdelete: var Transacao : TTransactionDesc; begin Transacao.TransactionID := 1; Transacao.IsolationLevel := xilREADCOMMITTED; DM.conConexao.StartTransaction(Transacao); try TClientDataSet(DataSet).ApplyUpdates(-1); DM.conConexao.Commit(Transacao); except TClientDataSet(DataSet).CancelUpdates; DM.conConexao.Rollback(Transacao); MessageDlg(´Ocorreram erros durante a operação!!!´,mtError, [mbOK],0); end;
Alguém sabe por que está ocorrendo isso? E qual seria a solução para o meu caso?
Até mais.
Iniciante2007
Curtidas 0
Respostas
Marco Salles
28/04/2007
tente programar o evento oneconcilerror do clientDataSet
GOSTEI 0