Fórum Tratamento de erro ao deletar registro com foreign key #586986

20/10/2017

0

Ola pessoal, estou precisando da ajuda de vcs aki com um problema que não estou conseguindo resolver.
E o seguinte na minha aplicação ao tentar excluir um registro que esta relacionado com uma outra tabela aparece a mensagem de erro foreign key, ai tentei tratar a mensagem com try except e nada de resolver, simplismente e ignorado o bloco de excecao e nao mostra a mensagem dizendo que ouve um erro.

Segue o codigo...

procedure TFrmCadBase1.btn_excluirClick(Sender: TObject);
begin
  if not DS_Consulta.DataSet.IsEmpty then
  try
    if MessageDlg('Tem certeza que deseja excluir o registro ?', mtInformation, [mbYes, mbNo],0) = mrYes  then
    begin
      DS_Consulta.DataSet.Delete;
      TClientDataSet(DS_Consulta.DataSet).ApplyUpdates(0);
    end;
  except on E: Exception do
    ShowMessage('Ocorreu um erro ao excluir o registro!');
  end;
end;
Francisco Ribeiro

Francisco Ribeiro

Responder

Posts

20/10/2017

Rafael Bosco

Você não está dando o rise na exceção, está chamando apenas uma mensagem, faça o seguinte:
    except on E: Exception do
           raise Exception.CreateFmt('Ocorreu um erro ao excluir o registro! Motivo: ' + E.Message, []);
Responder

Gostei + 0

20/10/2017

Francisco Ribeiro

Olá Rafael desde ja agradeço pela sua ajuda, eu fiz o que vc sugeriu mas, continua do mesmo jeito, não esta exibindo a mensagem tratada...
Responder

Gostei + 0

20/10/2017

Rafael Bosco

Por algum acaso em outros locais do seu programa é executado alguma exceção? Se a resposta for não, provavelmente está desativado o exception lá nas config do seu projeto do delphi.
Responder

Gostei + 0

20/10/2017

Francisco Ribeiro

Sim, e execulta por exemplo quando digito uma data invalida a exceção tratada funciona normalmente....quando executo a aplicação em modo debuger aparece a mensagem do erro, mas nao levanta exceçao nem a pau...to sem saber o que fazer....ja pesquisei demais e nada parecido com isso que estou vivendo....
Responder

Gostei + 0

23/10/2017

Wesley Yamazack

Opa Francisco, tudo bem?

Tenta utilizar o método ReconcileErro do teu clientdataset, veja se ele irá 'capturar' esse erro pra ti. Blz?


procedure TForm1.ClientDataSet1ReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin

ShowMessage('Deu erro nesse DataSet');

end;

Vamos fazer esse teste primeiro. Um abraço
Responder

Gostei + 0

23/10/2017

Francisco Ribeiro

Bom dia grande wesley, confesso que eu já estava pra te pedir socorro pra ,e ajudar a resolver esse problema.
eu fiz o que vc me disse e deu certo! a menssagem foi mostrada no evento onreconcileError do dataset.. ate ai tudo bem, ja tenho o inicio para
fazer o que eu quero. O que eu pretendo fazer, eu nao sei se vc ja entendeu nas outras mensagens mas vou explicar melhor.
O que eu quero é: quando usuario tentar excluir um registro que esteja relacionado com outra tabela, que apareça a mensagem tratada la do
evento onreconcileErro do dataset, e que nao apareça a mensagem de registro excluido com sucesso, e sim so a mensagem do erro e que a mensagem de registro excluido com sucesso apareca quando o usuario estiver deletando um registro que nao esteja relacionado com a outra tabela...Desde ja agradeço pela sua ajuda
Responder

Gostei + 0

23/10/2017

Francisco Ribeiro

Olá bom dia grande wesley, desde ja agradeço pela sua ajuda. Fiz o que vc me sugeriu e deu certo apareceu a mensagem, agora
o que falta e fazer é: que quando o usuario deletar um registro que esta relacionado em outra tabela, que so seja exibido a mensagem do erro e nao seja mostrada a mensagem de registro excluido com sucesso. E exatamente isso que eu quero e nao estou conseguindo resolver.
Responder

Gostei + 0

23/10/2017

Francisco Ribeiro

Opa Francisco, tudo bem?

Tenta utilizar o método ReconcileErro do teu clientdataset, veja se ele irá 'capturar' esse erro pra ti. Blz?


procedure TForm1.ClientDataSet1ReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin

ShowMessage('Deu erro nesse DataSet');

end;

Vamos fazer esse teste primeiro. Um abraço




Olá grande Wesley, eu consegui resolver meu problema, mas anida estou meio que na duvida se essa e uma boa prática para resolver este
tipo de situação. E eu queria que vc analisasse e me dê sua opinião..
Segue o código...
procedure TFrmCadBase1.btn_excluirClick(Sender: TObject);
var
  ErroApplyUpdates: Integer;
begin
  ErroApplyUpdates:= 0;
  if not DS_Consulta.DataSet.IsEmpty then
  if MessageDlg('Tem certeza que deseja excluir o registro ?', mtInformation, [mbYes, mbNo],0) = mrYes  then
  begin
    try
      TClientDataSet(DS_Consulta.DataSet).Delete;
      ErroApplyUpdates:= TClientDataSet(DS_Consulta.DataSet).ApplyUpdates(0);
    finally
      if ErroApplyUpdates = 0 then
        ShowMessage('Registro excluido com sucesso!')
      else TClientDataSet(DS_Consulta.DataSet).CancelUpdates;
    end;
  end;
  if not (PageControl.ActivePageIndex = 0) then
  TabVisivel(True, False);



Só Lembrando que eu fiz o tratamento da exceção lá no reconcileError do Dataset...
Responder

Gostei + 0

26/10/2017

Francisco Ribeiro

Opa Francisco, tudo bem?

Tenta utilizar o método ReconcileErro do teu clientdataset, veja se ele irá 'capturar' esse erro pra ti. Blz?


procedure TForm1.ClientDataSet1ReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin

ShowMessage('Deu erro nesse DataSet');

end;

Vamos fazer esse teste primeiro. Um abraço




Olá bom dia, Wesley Yamazack cadê você? eu consegui resolver o meu problema mas, como todo programador iniciante tenho minhas duvidas se realmente o que fiz e uma boa pratica. Gostaria muito da sua opinião na solução que apliquei no meu problema...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar