![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
- el programa no hace lo que se espera - no sabes que ha ocurrido un error. - no sabes cómo arreglarlo. Si no sabes cómo arreglarlo, no lo toques ![]() ![]() Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#2
|
||||
|
||||
Cita:
Cita:
![]() ![]() Por cierto. Si se hace uso de un Log de excepciones lo mejor es que sea un singleton. Es decir, que exista un sólo punto en donde se traten a las excepciones. Todas las excepciones van a un mismo objeto TLog, por ejemplo, y son guardadas en un único archivo. Aunque en ocasiones, no es buena opción. Más si tiene pensando en trabajar con muchos archivos .log. De igual manera, en ocasiones ante casos de éstas excepciones raras y a las que no sabemos tratar lo mejor es tener un "cuadro de diálogo único" por donde comunicarlas. Lo que si es una buena opción a tener en cuenta es la de convertir excepciones a un grado de abstracción adecuado y entendible para la clase que la recibe. Por ejemplo, supongamos que tenemos las clase A, B y C. A para trabajar se comunica con B, y B con C. A cuenta con un método MA, y en el cual se procede a una comunicación lineal hasta C. Es decir, MA invoca a un método MB, y MB a uno de MC. Ahora MC lanza una excepción EC, que la captura MB. Esta excepción a A no le corresponde el adecuado grado de abstracción, por tanto B "convierte" a esa excepción EC a una excepción EB, añadiendole la información necesaria para que A sepa como tratarla y se la transmite a A. Espero que me entienda, Saludos, |
#3
|
|||
|
|||
Sí mi código es demasiado simplón para que pueda ser reescrito mediante excepciones.
Pongo otro:
MySQL50Connection1 es un componente que se conecta a un servidor MySQL. Si todas las propiedades de ese componente (HostName, Port, UserName, Password, DatabaseName) están bien establecidas entonces se conectará al servidor MySQL sin problemas pero si no lo están, por ejemplo no hemos equivocado al introducir la contraseña el programa cascará y la ejecución se detendrá. Lo que yo quiero es controlar este aspecto y en vez de que casque que se envíe un mensaje al usuario pero que la ejecución no se detenga. Según lo que habéis escrito pienso que podría ser algo así:
Pienso que algo falta porque no he usado raise ni tampoco he hecho except on. ¿Me ayudáis a completarlo? Saludos. |
#4
|
||||
|
||||
Primeramente, estoy con el amigo Delphius: El capítulo mencionado del libro de la cara oculta es la mejor forma de entender el como y el porqué de las excepcines.
Por lo demás, si lo que quieres es mostrar un mensaje entendible sobre lo que ha sucedido, con lo que has puesto en tu código te vale perfectamente. Si lo que qieres es mostrar el mensaje pero además que el propio sistema te gestione la excepción original bastaría con añadir la clausula "Raise" después de showmessage, para que la excepción siga propagádose a lo largo del programa, hasta el gestor final. Un saludo |
#5
|
||||
|
||||
Eso sería muuuuy general y poco recomendable, ya que podría pasar cualquier cosa y aparecería el mismo mensaje. Lo mejor es utilizar una clase de excepción y una acción específica para cada cosa:
__________________
|
#6
|
||||
|
||||
Un detallito... Tu código no es simplón, es que testea una serie de condiciones y actua en todos los casos posibles (con un MessageBox, pero hace algo), por eso quizás no he entendido tu objetivo principal.
Pensando de forma global (abstracta que dirían algunos) tu último ejemplo está bien, ya que se trata de saber si se puede conectar o no con MySql. Si quieres obtener información detallada de por qué no se ha podido conectar, tendrás que mirar los tipos de excepciones que lanza MySql y detectar el código de cada uno, a partir de ahí personalizar los mensajes. Si quieres detalles, usa on except y el tipo de excepción de MySql. Lo mismo es aplicable para el trabajo de excepciones en general, siempre puedes usar un código general (para todos los tipos de excepciones) y otro más concreto para excepciones con un código de error. Lo más rápido para ver el tipo de error producido es:
A ver si un compañero que trabaje con MySql puede ponerte un código de ejemplo. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
La idea es que se gestione la excepcion pero que no muestre ningún mensaje al usuario, es decir, quiero que el programa se intente conectar y si no puede que no muestre ningún mensaje más que nada porque el programa que estoy haciendo va a ser un servidor y no va a haber ningún usuario para que cierre ventanas.
Algo así:
|
#8
|
||||
|
||||
con más razón necesitas saber cuál es la clase de la excepción cuando falla la conexión.
Dejar sin clase la excepción te podría generar más problemas de los que resuelve.
__________________
|
#9
|
|||
|
|||
De todas las propiedades por las que puede fallar: HostName, Port, UserName, Password, DatabaseName, un error de conexión sólo puede deberse a que la contraseña o el nombre de usuario no estén correctos, así que el error siempre se va a deber a eso.
Antes, cuando no usaba excepciones me salía en un mensaje que la clase de la excepción era EDatabaseError. ¿Cómo puedo saber los tipos de excepciones que lanza MySql? Saludos. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Estoy hecho un lio con los codigos de barra. Help!! | escullar | Impresión | 28 | 21-02-2007 03:17:52 |
Excepciones | banleu | Firebird e Interbase | 8 | 20-04-2006 00:11:18 |
Excepciones | Acker | Tablas planas | 6 | 06-08-2005 15:22:18 |
excepciones!!!!! | hanna33 | OOP | 3 | 24-05-2005 17:10:10 |
Excepciones del bde | Pablo Carlos | Conexión con bases de datos | 3 | 15-04-2005 17:57:46 |
![]() |
|