[firebase-br] Tratar mensagem de Constraint no Delphi 7
Fausto Alves
fausto.s.a em uol.com.br
Qua Set 9 21:28:41 -03 2009
Em 08/09/2009 16:23, Rogerio Monteiro escreveu:
> Olá colegas.
>
> Estou com o seguinte problema:
>
> Tenho uma Constraint unique UNQ_CLIENTE_1 que trata o campo CODCLI.
>
> CODCLI pode estar em branco.
> Quando CODCLI está em branco seu ReadOnly do Field do Dataset deixo como
> False (permitindo a edição). Se não for em branco, ReadOnly vai para True
> (não permitindo que se altere um código já cadastrado).
>
> PROBLEMA: Quando tenho um CODCLI em branco e digito um código que já existe
> na tabela, a Constraint UNQ_CLIENTE_1 levanta a exceção.
>
> DÚVIDA: como capturar no delphi essa exceção do Firebird?
>
Rogério caso esteja utilizando ClientDataSet escreva um código no evento
OnReconcilieError eu uso esse aqui:
A chamada ficaria assim:
Aponte o Evento para o OnReconciliError do ClientDataSet e no evento
Before post eu faço assim
if MeuCds.ApplyUpdates(0) > 0 then
begin
MeuCds.Edit;
Abort;
end;
Lembrando que a chamada a MsgErro é para uma function criada por mim.
procedure TDataAdm.ReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
var Action: TReconcileAction);
var
Mensagem: string;
begin
if Pos('VIOLATION OF FOREIGN KEY', UpperCase(E.Message)) > 0 then
begin
if UpdateKind in [ukInsert, ukModify] then
Mensagem := 'Dado inexistente.'
else if UpdateKind = ukDelete then
Mensagem := 'Registro não pode ser excluído.';
end
else if Pos('CHECK CONSTRAINT', UpperCase(E.Message)) > 0 then
begin
Mensagem := 'Verifique os dados informados!';
end
else if Pos('VALIDATION ERROR FOR COLUMN', UpperCase(E.Message)) > 0 then
begin
Mensagem := 'Valor inválido!';
end
else if Pos('EXCEPTION 4', UpperCase(E.Message)) > 0 then
begin
Mensagem := '';
end
else if Pos('STORE DUPLICATE VALUE', UpperCase(E.Message)) > 0 then
begin
Mensagem := 'Você está tentando gravar um valor que não pode ser
repetido.';
end
else if Pos('VIOLATION OF PRIMARY OR UNIQUE KEY',
UpperCase(E.Message)) > 0 then
begin
Mensagem := 'Registro já cadastrado.';
end
else if Pos('RECORD NOT FOUND OR CHANGED BY ANOTHER USER.',
UpperCase(E.Message)) > 0 then
begin
Mensagem := 'Registro não encontrado ou modificado por outro usuário.';
end
else
Mensagem := E.Message;
MsgErro(Mensagem);
end;
--
Fausto Alves
Skype:faustoalves
msn:faustoalves em com4.com.br
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird
Mais detalhes sobre a lista de discussão lista