Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   excepciones!!!!! (https://www.clubdelphi.com/foros/showthread.php?t=21631)

hanna33 23-05-2005 21:00:41

excepciones!!!!!
 
hola tengo un problema con excepciones... lo que pasa es ke quiero atrapar 2 excepciones una es para cuando el usuario quiere insertar un registro con la misma clave.... y otra cuando borro me marca un error pero si hace los cambio en mi bd...

la excepcion de insertar clave duplicada ya sale pero ahora cada vez que kiero modificar o bien borrar mis registros me marca el error de la clave duplicada...

ke es lo que pasa???

bueno el error que me marca cuando borro un registro es "row cannot be located for updating. Some values may have been changed since it was last read" al buscar este error encontre que es el de AspGridInsertError y trato de atraparlo pero siempre entra al de la clave duplicada...si fuera el mismo error como puedo saber cual error ocurrio para mandar el mensaje????

abajo agrego mi codigo por si alguien puede ayudarme...

procedure TForm1.error(Sender: TObject; E: Exception);
begin
if E.ClassNameIs('EConvertError') then
MessageDlg('No que no!!!',mtWarning,[mbYes],0)
else
if E.ClassNameIs('EDataBaseError') then
MessageDlg('Clave duplicada ',mtWarning,[mbYes],0)
else
if E.ClassNameIs('AspGridInsertError')then
MessageDlg('intentando borrar',mtWarning,[mbYes],0);
ADOTable1.Cancel;
end;



gracias y espero ke alguien pueda ayudarme

DarKraZY 23-05-2005 22:32:27

Supongo que habrás agregado tu función Error al Application.OnException, ¿no?

El problema que creo que tienes es que "EDataBaseError" es una clase de exception que detecta cualquier error relacionado con la base de datos. Deberías ser más específico a la hora de capturar las excepciones.

defcon1_es 24-05-2005 16:45:15

Hola, has visto el mensaje de la excepción?
Como dice DarKraZY, "EDataBaseError" es una clase de exception que detecta cualquier error relacionado con la base de datos.

Deberías visualizar el mensaje de la excepción:
Código Delphi [-]
procedure TForm1.error(Sender: TObject; E: Exception);
begin
  if E.ClassNameIs('EConvertError') 
  then MessageDlg('No que no!!! '+E.Message,mtWarning,[mbYes],0)
  else
    if E.ClassNameIs('EDataBaseError') 
    then MessageDlg('Clave duplicada: '+E.Message,mtWarning,[mbYes],0)
    else
      if E.ClassNameIs('AspGridInsertError')
      then MessageDlg('intentando borrar '+E.Message,mtWarning,[mbYes],0);
  ADOTable1.Cancel;
end;
Salu2.

Lepe 24-05-2005 17:10:10

Aquí aún no se ha comentado de qué tipo son las tablas ni el método de acceso, ni el delphi que se está usando, pero quizás te sirva de algo este hilo donde se engaña a delphi para que no salte una excepción de tipo EDatabaseError, sino una llamada EDBEngineError que si podemos controlar.

Espero te sirva de utilidad.


La franja horaria es GMT +2. Ahora son las 13:32:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi