Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Cuando la red falla como capturar error (https://www.clubdelphi.com/foros/showthread.php?t=86825)

Mauro® 09-10-2014 13:43:23

Cuando la red falla como capturar error
 
Buenos días a todos.
Necesito saber si alguien me puede dar una mano. Tengo un pequeño programa de gestión de turnos para un consultorio médico, el mismo lo usa la secretaria de los médicos en su pc donde esta la base de datos y el servidor Firebird. Los médicos se conectan desde sus equipos en cada uno de los consultorios para visualizar la lista de pacientes y turnos. El problema es que tienen una red muy inestable y no quieren mejorarla. Lo que necesito hacer es capturar el error cuando un equipo cliente pierde conexión para dar un mensaje personalizado y luego cerrar la aplicación. En vez de recibir el error que dice "Unable to complete network request to ...."
He buscado por el foro pero no encuentro nada. Se que podría usar un componente TAplicationEvent, pero no se como hacerlo para capturar ese error. (Uso Delphi XE3 + Firebird 2.5)

Desde ya quedaré muy agradecido a quien pueda echarme una mano.

Saludos a todos desde Argentina.
Mauro

duilioisola 09-10-2014 14:04:20

supongo que podrías poner el código que hace la consulta al servidor en un bloque TRY..EXCEPT.
Según el tipo de excepción darás un mensaje u otro.
Intenta producir el error (desconectando el cable de red, por ejemplo) y mira cual es el valor de E.ClassName

Código Delphi [-]
try
   // Hago consulta al sercidor
   ConsultaTurno;
except
   on e:Exception do
   begin
      // Mensaje de error propio
      ShowMessage('Se ha producido un error. Se cerrará la aplicación');
      // Clase de excepciçon que se ha producido
      ShowMessage('Exception class name = '+E.ClassName);
      // Mensaje original de la execpción
      ShowMessage('Exception message = '+E.Message);
      // Cierro la aplciación
      Close;
   end;
end;

Mauro® 09-10-2014 14:17:41

Gracias por la respuesta
 
Duilio gracias por tu respuesta.
He hecho esto que indicas, pero por cada evento que maneja la conexión con la base de datos debo colocar un Try Except End; queria saber hay alguna manera de monitorear este error a nivel aplicación para no tener que agregar un try en cada evento que accede a los datos.
Existe esto que planteo?

Muchas gracias

Casimiro Notevi 09-10-2014 15:27:38

Algunos componentes hacen eso, pero no es la solución, es como si le falta una rueda al coche y quieres que haya alguien ocupando su lugar. La solución es ponerle la rueda.
En este caso, obviamente, la solución es arreglar la red, que unos metros de cables, para unos médicos, es poca cosa, seguro que se gastan más en tabaco :D

duilioisola 09-10-2014 15:36:46

Estoy de acuerdo con Casimiro, pero se que los usuarios no valoran la inversión en infraestructura si se puede "apañar" con parches aquí o allá.

Con respecto a un "capturador de excepciones", creo que puedes hacer esto en tu Formulario principal:

Código Delphi [-]
...
private
  procedure CapturaErrores(Sender: TObject; e: Exception);
...

procedure TFMPrincipal.FormCreate(Sender: TObject);
begin
  ...
  Application.OnException := CapturaErrores;
  ...
end;

procedure TFMPrincipal.CapturaErrores(Sender: TObject; e: Exception);
begin
  // Mensaje de error propio
  ShowMessage('Se ha producido un error no tratada. Se cerrará la aplicación');
  // Clase de excepción que se ha producido
  ShowMessage('Exception class name = '+E.ClassName);
  // Mensaje original de la excepción
  ShowMessage('Exception message = '+E.Message);
  // Cierro la aplicación
  Close;
end;

Mauro® 09-10-2014 15:39:57

Gracias
 
Muchachos gracias por las respuestas.
Duilio efectivamente la ultima solución es la que utilice, para parchear el problema.
Estoy de acuerdo con Uds. que debería resolverse el problema de fondo que es la red, pero... el cliente siempre tiene razón, yo ya les he aconsejado si ellos quieren solucionar el problema ya saben donde esta el mismo.

Desde ya muchas gracias.
Saludos
Mauro


La franja horaria es GMT +2. Ahora son las 02:20: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