vitow 0 Denunciar post Postado Setembro 27, 2007 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
marcio.theis 3 Denunciar post Postado Setembro 27, 2007 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
vitow 0 Denunciar post Postado Setembro 27, 2007 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
marcio.theis 3 Denunciar post Postado Setembro 27, 2007 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
vitow 0 Denunciar post Postado Setembro 27, 2007 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
marcio.theis 3 Denunciar post Postado Setembro 27, 2007 Bom, roda passo a passo para ver a ClassName de retorno, ou então da um ShowMessage(E.ClassName), para saber qual é a classe do erro... Compartilhar este post Link para o post Compartilhar em outros sites
vitow 0 Denunciar post Postado Setembro 27, 2007 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
marcio.theis 3 Denunciar post Postado Setembro 27, 2007 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
vitow 0 Denunciar post Postado Setembro 27, 2007 é 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
marcio.theis 3 Denunciar post Postado Setembro 27, 2007 tranqüilo, se puder dê um retorno depois se funcionou ou não... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
vitow 0 Denunciar post Postado Setembro 28, 2007 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
vitow 0 Denunciar post Postado Setembro 28, 2007 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
Edilson355 0 Denunciar post Postado Agosto 29, 2011 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
bdexterholland 0 Denunciar post Postado Agosto 31, 2011 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