Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   manejo de excepciones en lazarus (https://www.clubdelphi.com/foros/showthread.php?t=70917)

marioar 19-11-2010 04:34:28

manejo de excepciones en lazarus
 
Hola gente, estoy teniendo problema para controlar las excepciones, en particular lo que quiero hacer es controlar la existencia de un archivo dbf, el codigo es el siguiente:

Código Delphi [-]
try
  dbf2.FilePathFull:= DirecOrigen.Text;
  dbf2.TableLevel:=7;
  dbf2.TableName:= 'profesional.dbf';
  dbf2.Active:= true;
  except
  on e : exception do
  begin
     application.MessageBox('Verifique la ruta de origen', 'error', 0);
     exit;
  end;
end;

cuando busco en una ubicacion incorrecta me tira el cartel "reised exception class 'Exception' with message: Open: file not found: ...."

alguna idea de donde estoy pifiando???
gracias!!

duilioisola 19-11-2010 18:03:27

Supongo que la excepción debe estar saltando DENTRO del procedimiento que abre la base de datos y es tratada por el componente, mostrando el mensaje.

Otra posibilidad es que la excepción esté saltando antes o después de código que escribes.

¿Podrías decirnos en qué línea te da el error?

De todos modos, supongo que lo correcto sería ver si existen los ficheros con alguna función que trate ficheros y no esperar a que falle algún otro componente que dependa de ellos.

En este caso particular, creo que deberías utilizar la función FileExists

duilioisola 19-11-2010 18:11:15

Está muy bien utilizar excepciones para controlar fallos que no se pueden preveer.
En este caso es un abuso de lla estructura try..except.
Sabiendo que vamos a abrir un fichero de una carpeta que el usuario selecciona, es muy probable y previsible que el fichero no esté en la carpeta.

El ejemplo más simple es pedir dos números y devolver la divisón entre ellos.
Con un simple IF se solucionan todos los errores posibles (división por 0)
En cambio, podemos hacer la división, dejar que falle y que se maneje la excepción. Esto consume muchos más recursos del ordenador, entorpece la lectura del código y rompe la fluidez que debería tener.

Código Delphi [-]
begin
   if (b=0) then 
      Mensaje ('No se puede dividir por 0');
   else
      Resultado := a/b;
end;

Código Delphi [-]
begin
   try
      Resultado := a/b;
   except
      on e:Exception do
         Mensaje('Ha ocurrido un erro: '+E.Message)
   end;
end;

krlosrp 02-12-2010 23:07:12

Yo haría algo como:

Código Delphi [-]
if(FileExists(DirecOrigen.Text+'\profesional.dbf'))then 
begin
   dbf2.FilePathFull:= DirecOrigen.Text;   
   dbf2.TableLevel:=7;   
   dbf2.TableName:= 'profesional.dbf';   
   dbf2.Active:= true; 
end else 
  MessageBox('¡Vefique la ruta del archivo!');

Así evitas provocar errores sobretodo en lazarus porque a veces algunas cosas no funcionan como uno estaba acostumbrado en delphi, debe ser por que todavía está en versión beta.


La franja horaria es GMT +2. Ahora son las 21:17:32.

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