GARANTIR DESCONTO

Fórum Como Tratar erro enviado pelo Firebird no delphi #357304

17/04/2008

0

Ola estou com a duvida com tratar erro que venha do sgdb, Ex: eu criei alguns campos no Firebird 1.5 com a constraints- unique, ou seja eu nao posso digitar estes campos mais de uma vez iguais, para ser utilizado em CPF e outros, mas quando eu insiro um valor igual ele me retorna um erro do banco informando q é um unique key, ai pergunto como eu devo tratar estes erro eu que sao enviados pelo Firebird ????
Caso alguem possa ajudar é algo muito util para muitos... VLw


Digaopachesen

Digaopachesen

Responder

Posts

18/04/2008

Fabiano Góes

O Delphi te um componente chamado: [b:aa80bae9c7]ApplicationEvents[/b:aa80bae9c7], que está na paleta Additional.

coloque este componente no form principal do projeto, e no evento:
OnException faça o tratamento de erros.

alguma coisa desse tipo:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
   if Pos(UpperCase(´key violation´), UpperCase(e.Message)) > 0 then
      ShowMessage(´Violação de chave primaria ou chave unica´);
end;



Responder

Gostei + 0

18/04/2008

Digaopachesen

Obrigado por responder, hj eu consegui esta informacao com um colega mas eu nao peguei o codigo para comparar com a tua resposta, bom eu fiz como vc informa e nao deu nenhum erro quando riz o teste e nenhuma mensagem nao entendi se era esta a resposta que ele deveria dar oou deveria informar o erro como descrito no show message vlw


Responder

Gostei + 0

19/04/2008

Marco Salles

eu acho que depende entre outros dos componentes de acesso ao SGDB
que voce utiliza ... Por exemplo o clientDataSet não propaga o erro . então se vc estiver usando o cds a dica do fabiano.goes talvez não funcione


Responder

Gostei + 0

19/04/2008

Fabiano Góes

[quote:61ee6c7ccb=´Marco Salles´]eu acho que depende entre outros dos componentes de acesso ao SGDB
que voce utiliza ... Por exemplo o clientDataSet não propaga o erro . então se vc estiver usando o cds a dica do fabiano.goes talvez não funcione[/quote:61ee6c7ccb]

Marcos,
aproveitando a deixa,
qual a maneira correta de se tratar erro quando se usa clientdataset?


Responder

Gostei + 0

19/04/2008

Marco Salles

acredito que no evento econcileerror do clientdataset

o delphi tem ate o formulario ReconcileErrorForm ja pronto para ser adicionado ao projeto

File -->> new -->> other -->> Dialogs 


no evento oneconcilerror do clienteDataSet voce cria ou chama este formulário

Action := HandleReconcileError(DataSet, UpdateKind, e); 


acho que é uma boa opção


Responder

Gostei + 0

19/04/2008

Digaopachesen

bom estou utilizando um SimpleDataSet componente DbExpress, agora no meu projeto quando ocorre algun erro ele informa o erro como sempre mas se eu executar diretamente pelo executavel ele nao informa qual é o erro acredito q seja pq o erro q ocorreu eu nao estou verificando, simplismente ele continua a aplicacao como se nada tivesse acontecido... agora esta assim eu incluo 10 cadastro novos com o nome iguais em todas, em meu projeto o campo NOME esta utilizando uma chave unica ou seja se ja existir um nome igual ele nao deixa gravar , entao utilizando a primeira indicacao do colega eu posso adicionar 10 item e ele mostra como se tivesse gravado mas quando eu saio do sistema ele nao gravou nenhum dos registro q digitei com o nome igual...como fazer para tratar esta situacao...desde ja Agradeco


Responder

Gostei + 0

19/04/2008

Digaopachesen

utilizando a indicaçõa
Código:

procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
begin
if Pos(UpperCase(´key violation´), UpperCase(e.Message)) > 0 then
ShowMessage(´Violação de chave primaria ou chave unica´);
end;


eu adicionei um showmessage com qualquer coisa para ver se estava funcionando e realmente estava mas assim o registro fica como se estivesse salvo eu tentei da refresh no componente, tentei cancelar, mas nao deu certo, e ele fica como se estive salvo, ai se eu fechar e abrir novamente este registro q deu erro nao vai estar mais la, como q posso fazer para q ele ou fique como se eu estive editando o registro ainda????
vlw pela ajuda


Responder

Gostei + 0

19/04/2008

Marco Salles

se voce nao quiser usar o form de exceção ([b:e413cb6bba]ReconcileErrorForm[/b:e413cb6bba]) como sugerido voce deve fazer o seguinte


procedure TForm1.ApplicationEvents1Exception(Sender: TObject; 
E: Exception); 
begin 
if Pos(UpperCase(´key violation´), UpperCase(e.Message)) > 0 then
   begin
    raise exception.Create(´Violação de Chave Primaria´);
    abort;
 end; 


acho que esta exceção seguido do abort , evita a inclusão.... estou sem o delphi para testar ... mas tente isso
boa sorte


Responder

Gostei + 0

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

Aceitar