Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   No me sale el manejo de excepciones (https://www.clubdelphi.com/foros/showthread.php?t=33564)

Torreblanca 11-07-2006 07:02:03

No me sale el manejo de excepciones
 
Hola a todos:

Tengo el siguiente problemita, en realidad nunca he usado las excepciones en algún problema en delphi y necesito de su ayuda: ya he buscado en los foro, leido el libro de Ian Marteens y entendi pero no me sale

Mi duda es la siguiente:

Tengo un campo en la tabla Empleados en donde se almacena la ubicación de la imagen del empleado. Con el siguiente código muestro la imagen del empleado en caso de que exista el registro en la base de datos:

Código Delphi [-] if not (Datamodule1.QueryGenerico.Fields[13].AsString = '') then begin FrmEmpleadosD.Imagen.Visible:=true; FrmEmpleadosD.Imagen.Picture.LoadFromFile(Datamodule1.QueryGenerico.FieldValues['img_empleados']); end;



Pero por si alguna razón la imagen es borrada, eliminada, etc. Al ejecutar el programa muestra un error :
Código:

exception class EFOpenError with message ‘Cannot open file “C:imágenes\empleado12.jpg”’.
Lo que he tratado pero no me ha salido es usar el manejo de excepciones con try ... except para que si no encuentra la imagen, el sistema mande un mensaje de error personalizado y de ser posible borre la entrada errónea en la BD (esa es otra historia),


Estoy usando Delphi 7 y Access y la conecto mendiante ADO. Gracias de antemano por ayudarme. :D




epuigdef 11-07-2006 07:38:20

Buenas!

Ten en cuenta que si estás ejecutando el programa desde el IDE te va a saltar la excepción como si no estuviera controlada, prueba ejecutando directamente el exe fuera del IDE y verás el comportamiento exacto.

En principio el manejo de excepciones deberá ser:

Código Delphi [-]
  try
     < Código con posible excepción >
  except
     showmessage('ha ocurrido un error');
     < Otras acciones  >
  end


Un saludo

Edu

Lepe 11-07-2006 09:41:28

Vayamos por partes:

Lo primero es definir nuestras propias excepciones, a mí me gusta hacerlo para cada proyecto:
Código Delphi [-]
type 
   EMiProyecto = class (Exception);
Esto lo ponemos en alguna unidad que se use en todo el proyecto, para tenerla a mano.

Cuando queremos lanzar una Excepción usamos:
Código Delphi [-]
raise EMiProyecto.Create('Mensaje de la Excepción');

Para el caso concreto, entre otras formas, podemos hacerlo así:
Código Delphi [-]
if not (Datamodule1.QueryGenerico.Fields[13].AsString = '') then begin 
try
  FrmEmpleadosD.Imagen.Picture.LoadFromFile(Datamodule1.QueryGenerico.FieldValues['img_empleados']); 
except
On E:Exception do //para cualquier excepción
  raise EMiProyecto.CreateFmt(' el archivo %s no puede cargarse', 
                         Datamodule1.QueryGenerico.Fields[13].AsString );
FrmEmpleadosD.Imagen.Visible:=true;
end;

Como sabes, al producirse una excepción se corta la ejecución del programa justo en la línea "raise ..." por tanto, en el caso de que no se encuentre la imagen, no se hará visible el TImage.

Cuando el archivo se encuentre, pues se obvia las lineas del manejo de excepciones y despues sí se hará visible.

Si te fijas en el mensaje de la excepción, no digo que no se ha encontrado la imagen, sino que no puede cargarse. El método LoadFromFile puede que lance un error de "formato de imagen no válida" en lugar del tipico "no se encuentra el archivo".

Saludos.

Torreblanca 11-07-2006 18:32:45

Ya salio
 
Gracias Lepe y Edu ambas respuestas me aclararon mucho este asunto sobre las excepciones y pos ya le entendi completamente al manejo de excepciones gracias a Lepe, y sin tu comentario Edu habria seguido frustrado pensando en que no salia jajaja

Saludos desde El bello puerto de Veracruz!!!

:)


La franja horaria es GMT +2. Ahora son las 01:43:21.

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