Ir ao conteúdo

Problemas em tratar exceções


Mateussi

Posts recomendados

Postado

E ai pessoal, beleza?

Estou com um problema em tratar as exceções no delphi. Eu fiz uma trigger no banco para verificar se existe alguma especialidade já cadastrada; se usuario cadastrar uma especialidade que já exista no banco, o banco vai retornar a mensagem do banco, mas no delphi eu quero tratar essa mensagem e não estou conseguindo colocar tratar ela no try/exception.

Eu fiz de duas maneiras e nenhuma delas deu certo.

1ª maneira

try

DM.ClientDataSetEspecialidade.Post;

except

Application.MessageBox('Existe um registro já cadastrado!','Especialidades', mb_OK);

DM.ClientDataSetEspecialidade.Cancel;

end;

DM.ClientDataSetEspecialidade.ApplyUpdates(0);

2ª maneira

try

DM.ClientDataSetEspecialidade.Post;

except

on e: EDatabaseError do

Application.MessageBox('Existe um registro já cadastrado!','Especialidades', mb_OK);

end;

DM.ClientDataSetEspecialidade.ApplyUpdates(0);

alguem poderia me ajudar a tratar esse problema??

Estou usando firebird 2.0 e delphi 7.

Os componentes do delphi que estou usando no data module são: SQLDataSet, ClientDataSet e DataSetProvider

Postado

Bom amigo, no componente ClientDataSet tem um evento "OnPostError" e no DataSetProvider tem o evento "OnUpdateError".

Veja se voce consegue capturar o erro num desses eventos e trata-lo ali mesmo.

Postado

Caso alguem tenha a mesma dúvida que eu tinha na questão de tratar uma exceção do bd, pra verificar se existe registros duplicados, vou postar aqui a minha solução.

procedure TDM.ClientDataSetEspecialidadeBeforePost(DataSet: TDataSet);

begin

QDuplo.Close;

QDuplo.SQL.Clear;

QDuplo.SQL.Add('select nome from especialidade where nome = :nomeduplo');

QDuplo.ParamByName('nomeduplo').AsString :=

ClientDataSetEspecialidade.fieldByName('nome').AsString;

QDuplo.Open;

if not QDuplo.IsEmpty then

begin

MessageDlg('Existe um registro já cadastrado.', mtInformation, [mbOK],0);

QDuplo.Close;

ClientDataSetEspecialidade.Cancel;

Abort;

end;

end;

Dentro do "Before Post" do evento do "ClientDataSet", eu coloquei uma query pra verificar no banco de dados se existe registros iguais cadastrados; se existir o sistema vai mandar uma mensagem informando que existe registros cadastrado.

E dentro do botão gravar que foi colocado no form...coloquei um try/except, e dentro do try foi colocado o seguinte código: "DM.ClientDataSetEspecialidade.ApplyUpdates(0);".

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...