Fórum Tratamento de erro ao deletar registro com foreign key #586986
20/10/2017
0
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
Curtir tópico
+ 0Posts
20/10/2017
Rafael Bosco
except on E: Exception do
raise Exception.CreateFmt('Ocorreu um erro ao excluir o registro! Motivo: ' + E.Message, []);
Gostei + 0
20/10/2017
Francisco Ribeiro
Gostei + 0
20/10/2017
Rafael Bosco
Gostei + 0
20/10/2017
Francisco Ribeiro
Gostei + 0
23/10/2017
Wesley Yamazack
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
23/10/2017
Francisco Ribeiro
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
23/10/2017
Francisco Ribeiro
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
23/10/2017
Francisco Ribeiro
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
26/10/2017
Francisco Ribeiro
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
Clique aqui para fazer login e interagir na Comunidade :)