Ir para conteúdo

POWERED BY:

Arquivado

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

vitow

Como fazer o tratamento do erro EZSQLException?

Recommended Posts

Caros Amigos, preciso de uma ajudinha!!!...

 

Eu to querendo tratar um erro de exceção com o seguinte nome "EZSQLException"... este erro acontece quando eu tento deletar um cadastro de uma tabela pai sendo que esta contém filhos em outra tabela... entenderão? ... (eu utilizo o Zeos para conectar o banco de dados MYSQL)

 

Quando eu tento deletar um cadastro atravéz do DBNavigator ele detecta que este cadastro contém filhos e acusa um erro chamado EZSQLException... então eu quero tratá-lo!

 

pensei o seguinte:

 

procedure TFrmTeste.NavigatorClick(Sender: TObject;  Button: TNavigateBtn);begin     try        if(nbDelete = Button) then  // se o usuário precionar o butão delete           ...       Except            on [color="#FF0000"]EZSQLException [/color]do                    ShowMessage(' .... ');            end;       end;end;
só que aparece um erro de compilação Undeclared identifier: 'EZSQLException'....

 

Eu não sei direito fazer tratamento de erros, então eu preciso de uma ajuda pra solucionar este caso!!!... Vocês podem me ajudar?????

 

obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vai precisar mudar um pouco a forma de validação..

 

 

procedure TFrmTeste.NavigatorClick(Sender: TObject; Button: TNavigateBtn);begintryif(nbDelete = Button) then // se o usuário precionar o butão delete...except	on E: Exception do		begin		if E.ClassName = 'EZSQLException' then			begin			end;		end;	end;end;

 

Ou seja, terá de pegar o nome da classe do erro e verificar por ele...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Marcio.Theis, eu percebi uma coisa aqui que me deixou entrigado.... eu coloquei o tratamento de exceção corretamene desta vez, mas continuou acontecendo o erro!! aew eu percebi que quando eu clico no botão DELETAR do DBNavigator, ele surge uma menssagem de confirmação: DELETE RECORD? .... ou seja antes de entrar na procedure NavigatorClick ele executa essa menssagem e já efetua o error....COMO EU FARIA PRA TRATAR ESSE ERRO??grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não utilizo este componente, sempre uso botões com eventos criados... não sei muito bem como funciona o mesmo...

No caso poderia adicionar o componente TApplicationEvents, da paleta Additional, e no evento OnException fazer o tratamento, isso será atribuído então para todo o seu aplicativo de forma automática, precisando colocar o componente apenas no seu form principal...

Precisando somente fazer:

 

if E.ClassName = 'EZSQLException' then	begin	end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poo amigão... não está dando certo!! =/

 

a menssagem que dá, é a seguinte: "Project Teste.exe raized exception class EZSQLException with message 'SQL error:Cannot delete or update a parent row:......' "

 

eu fiz todos os procedimentos inserindo o TApplicationEvents no meu form principal e no OnException eu coloquei o código seguinte:

ShowMessage('tratamento de error!!');  if E.ClassName = 'EZSQLException' then    begin        ShowMessage('encontrou no error!!...!!');  // coloquei uma menssagem, apenas para verificar se entra aqui...     end;

 

mas exibiu apena a menssagem "tratamento de error!!" depois da minha confirmação dos erros surgidos... =/

 

valeu..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O nome da classe do error é: "EZDatabaseError"então o coloquei no if E.ClassName = 'EZDatabaseError' then....ele entrou na condição do erro, mas naum deixou de parar a execução da aplicação!!... tenho que fazer com que ele deixe de parar a execução do programa, aparecendo a menssagem de alerta ao usuário, para que não execute esse passo novamente!! entendeu???em Java... o tratamento de exceção bania o erro, não deixando-o acontecer.... e no delphi ele encontrou o error e naum o corrigiu alertando o usuário com a menssagem que coloquei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isto provavelmente é por causa deste componente que esta usando, se fizer tudo via botões, e você mesmo fazer o código de exclusão, provavelmente vai funcionar, pois o componente pode ter um try except que gera mensagem tb...

Compartilhar este post


Link para o post
Compartilhar em outros sites

é verdade!!...vou tentar fazer com botões mesmo... assim eu posso tratar esse error!!valeu marcio pela pasciencia!!!abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi marcio.theis.....

 

seguinte amigão, me responde a ultima duvida desse problema aew!!!

 

 

Tem como inibir uma exceção criada com uma cláusula raise??

 

O TApplicationEvents ele não deixa que a exceção execute o Debugger Exception Notification?? ele capta o error primeiro antes da exceção executar o Debugger??....

Compartilhar este post


Link para o post
Compartilhar em outros sites

if (E is  EDatabaseError) then    begin       case EZSQLException(E).ErrorCode of          1451:                Application.MessageBox(PChar('Não é possível excluir este registro.'),                'Atenção !!!', MB_ICONEXCLAMATION);       else            ShowMessage(IntToStr( EZSQLException(E).ErrorCode));       end;    end;

 

esse código corrige o erro que aparece após os Debugger Exception Notification... mas naum os evita!!!

 

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe por ressuscitar um tópico tão antigo, mais eu to com um problema bem parecido

Só que eu to usando um arquivo ini para configurar a conexão com ZConnection , mais crio esse erro de propósito pra se num eventual problema no PC do meu cliente por acidente ele mudar alguma coisa sei lá, eu quero tratar esse erro mandando uma mensagem e e executando uma manutenção de Banco de dados.

segue o codigo

 


procedure TF_Principal.FormCreate(Sender: TObject);

 begin
try
 loadIni:=TIniFile.Create('Config.Ini');
 with ZConnection1 do
 begin
 Database:=loadIni.ReadString('Config', 'DataBase','' );
 HostName:=loadIni.ReadString('Config', 'HostName','' );
 Password:=loadIni.ReadString('Config', 'Password','' );
 Protocol:=loadIni.ReadString('Config', 'Protocolo','' );
 User:=loadIni.ReadString('Config', 'Username', '');
 Connected:=true;
 end;
 except
 on E: Exception do
 begin
 if E.ClassName = 'EZSQLException' then
 begin
 ShowMessage('Eita coisa dificil');
 end;
 end;


 end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu também não trabalho com o zeos, portanto, não posso garantir muita coisa, mas posso dizer para fazer como o MárcioTheis disse, verifique o nome da classe e trate a exception com o nome correto (para verificar, deixe o exception ocorrer sem tratamento)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.