Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-12-2006
Caray Caray is offline
Miembro
 
Registrado: abr 2006
Posts: 61
Poder: 19
Caray Va por buen camino
Dudas con Try/Except en código

Que tal gente de este foro, el presente mensaje es para ver si me pueden despejar una duda en cuanto a un código que tengo.
El código me sirve para abrir un pequeño documento de ayuda hecho en Word (dada una ruta) y si no está en la ruta especificada me manda una pequeño mensajillo, a continuación está el codigo:
Código Delphi [-]
procedure Tfrmdatos_personales.AyudaClick(Sender: TObject);
var
Word : Olevariant;
begin
 Word := CreateOleObject('Word.Application');

try
   Word.Documents.Open('E:\CARAY\Caray Word\ayuda.doc');
   Word.Visible := True;
except
  on EOleException do
  MessageDlg('El Archivo de Ayuda no se Encontró en la Ruta Especifícada.', mtInformation,[mbOk], 0);
  end;

end;
En lo que quiero que me ayuden es en decirme si hicé bien en utilizar el try/except puesto que leí algo donde dice que casi nunca utilice esto. Esa es mi duda.
Esperando su respuesta me despido no sin antes agradecerles el favor de su atención.
__________________
La inteligencia me persigue, pero yo soy más rápido que ella.
Responder Con Cita
  #2  
Antiguo 13-12-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola Caray
Mas bien lo que yo he visto es que si se tiene que usar, y que ayuda en la ejecucion del programa, reduciendo el tiempo entre otros.
Yo siempre que puedo y me acuerdo, lo uso.
Saludos
Responder Con Cita
  #3  
Antiguo 13-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo que no queda claro es para qué utilizar el "try ... except" en este caso. Siempre puedes comprobar antes que el archivo a abrir exista realmente. La función "FileExists" puede servirte. En cuanto al tratamiento de la supuesta excepción indicas en un mensaje al usuario que el archivo no existe, pero, ¿"EOleException" significará eso realmente?

Tal vez sí, no he tratado mucho con objetos "OLE", pero, ya digo, en este caso, si se trata de averiguar si un archivo existe, no veo para qué dejar que se produzca una excepción, puesto que podemos comprobar previamente si el archivo existe o no. Tal vez sea menester el bloque "try ... except", pero, por otros motivos. ¿No?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 13-12-2006
Avatar de rcarrillom
[rcarrillom] rcarrillom is offline
Miembro Premium
 
Registrado: dic 2004
Ubicación: UK / North Sea / Norway / Golfo de México / Frente a mi Laptop
Posts: 219
Poder: 20
rcarrillom Va por buen camino
Hola a todos.
La estructura está bien y de hecho se debe de usar, con una observación personal de la linea
on EOleException do
ésta especifica qué tipo de excepción en particular se debe manejar. No estoy familiarizado con el uso de Word mediante OLE, pero intuyo que el origen de la excepción podría ser por ejemplo que no esté instalado el Office, la falta de memoria para abrir el archivo ya sea por tener poca RAM o tener abiertas muchas apps, que el .doc esté corrupto, que el doc se encuentre en una ubicación de la red no accesible, etc, no solamente que no exista el documento en disco, tu bloque de control de error asume que esa es la única razón. Reitero, no estoy familiarizado on el OLE, pero yo recomendaría buscar la manera de saber exactamente si el origen de la excepción es efectivamente que no exista el doc.

En mi lógica de programación usaría este flujo:
1. Comprobar si está instalado Word.
2. Usar la función de Delphi FileExists para saber si existe el archivo.
3. Crear el objeto OLE y continuar normalmente.[/font]

Espero que mi comentario haya sido útil.
__________________
eLcHiCoTeMiDo - Rompecorazones profesional
Yo no soy presumido; ¿Pero de qué sirve mi humilde opinión contra la de los espejos?
Salva a un nylon, usa prendas de piel de foca
Responder Con Cita
  #5  
Antiguo 13-12-2006
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Yo creo que es innecesario en este caso usar el try, ya que se supone que el espíritu de las excepciones es que el programa pueda solucionar u ofrecer un alternativa de solución al problema que generó la excepción y de esta forma seguir funcionando sin caerse.

En este caso particular de nada nos sirve el mensaje ya que no soluciona nada para el usuario, es más me doy cuenta que lo usas para mostrar una ayuda al usuario abriendo word....y si el usuario no tiene Word?... tu código fallará desde la primera instrucción y ahi si no capturas la excepción por lo que en ese caso el usuario solo verá un bonito mensaje críptico.

Soluciones:
1.- No uses word solo para mostrar una ayuda...Un richedit te puede servir mas o menos igual
2.- Verifica que tanto word como el archivo de ayuda esten disponibles antes de tratar de hacer nada con ellos en el código

consejo:
Los try son útiles y necesarios por ejemplo cuando creas objetos al vuelo para asegurarlos que si ocurre un error se destruya correctamente el objeto..también para asegurarnos que dejemos la aplicación como estaba hasta antes de que ocurriera el error.
Para liberar objetos...
Código Delphi [-]
 Miventana := TForm.Create(nil);
 Try
   MiVentana.ShowModal;
  //..Hacemos algo con MiVentana
  //.
  //.
 finally
   MiVentana.Free;  //Si ocurriera un error en el codigo entre "try" y "finally"
 end;                    // Miventana siempre se destruye correctamente

para dejar las cosas como las encontramos...
Código Delphi [-]
//Vamos a ejecutar un proceso que tarda un poco
 Screen.cursor:=crHourglass;  // Ponemos el relojito...
 Try
  //..Hacemos algo que tarde mucho y pueda fallar
  //.
  //.
 finally
  Screen.Cursor := crArrow; // Si ocurrio un error de todos modos 
  end;                             //  dejamos el cursor nuevamente como estaba

Ejemplo anterior pero tratando la excepcion
Código Delphi [-]
//Vamos a ejecutar un proceso que tarda un poco
 Screen.cursor:=crHourglass;  // Ponemos el relojito...
 Try
  Try
    //..Hacemos algo que tarde mucho y pueda fallar
    //.
    //.
  except
    //Corregimos el error o informamos que no se pudo corregir
  end;

 finally
  Screen.Cursor := crArrow; // Si ocurrio un error de todos modos 
  end;                             //  dejamos el cursor nuevamente como estaba
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 15-12-2006
Caray Caray is offline
Miembro
 
Registrado: abr 2006
Posts: 61
Poder: 19
Caray Va por buen camino
Algunas razones

Bueno compañeros gracias por las respuestas dadas, me hace mucho bien sus puntos de vista.
La verdad es que yo soy un novato en delphi leo algo cuando tengo chance, el obejtivo del código era mostrar el mensaje dado en Except si no se encontraba el archivo en la ruta dada, es decir, si la ayuda esta en el directorio C y movido pues queria mostrar este mensaje.
Pero de todos modo gracias, por sus puntos de vista.
__________________
La inteligencia me persigue, pero yo soy más rápido que ella.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
contraer por codigo, cxGrid (+) los nodos abiertos cerrarlos por codigo sakuragi OOP 6 27-07-2005 18:23:07
de codigo VB a codigo Delphi ingel Impresión 2 20-07-2004 14:15:44
Dudas con el sql acrophet Conexión con bases de datos 6 07-10-2003 16:29:54
Dudas de SQL Rubiel SQL 2 09-06-2003 16:16:50
Dudas de SQL Rubiel Conexión con bases de datos 3 09-06-2003 15:53:41


La franja horaria es GMT +2. Ahora son las 05:03:37.


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
Copyright 1996-2007 Club Delphi