Tratamento de erro ao deletar registro com foreign key
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...
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
Curtidas 0
Respostas
Rafael Bosco
20/10/2017
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, []);
GOSTEI 0
Francisco Ribeiro
20/10/2017
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...
GOSTEI 0
Rafael Bosco
20/10/2017
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.
GOSTEI 0
Francisco Ribeiro
20/10/2017
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....
GOSTEI 0
Wesley Yamazack
20/10/2017
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
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
GOSTEI 0
Francisco Ribeiro
20/10/2017
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
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
GOSTEI 0
Francisco Ribeiro
20/10/2017
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.
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.
GOSTEI 0
Francisco Ribeiro
20/10/2017
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
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...
GOSTEI 0
Francisco Ribeiro
20/10/2017
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
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...
GOSTEI 0