PDA

Ver la Versión Completa : excepciones!!!!!


hanna33
23-05-2005, 21:00:41
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:

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 (http://www.clubdelphi.com/foros/showthread.php?t=20490&highlight=edatabaseerror) 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.