Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-10-2014
Mauro® Mauro® is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 62
Poder: 21
Mauro® Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 09-10-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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;
Responder Con Cita
  #3  
Antiguo 09-10-2014
Mauro® Mauro® is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 62
Poder: 21
Mauro® Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 09-10-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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
Responder Con Cita
  #5  
Antiguo 09-10-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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;
Responder Con Cita
  #6  
Antiguo 09-10-2014
Mauro® Mauro® is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 62
Poder: 21
Mauro® Va por buen camino
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Un IBQuery que falla cuando se ejecuta por segunda vez gorsan Conexión con bases de datos 3 18-03-2014 00:05:01
Como capturar mensaje cuando se intenta duplicar una clave primaria de una BD RedVenom MS SQL Server 24 26-05-2011 20:37:35
Me falla el programa cuando cambio el directorio de impresion titancc Impresión 3 12-01-2011 19:55:21
Cuando falla la conexión JLR Conexión con bases de datos 8 31-10-2007 13:56:32
capturar la pantalla completa cuando hay un error ingel Varios 2 15-08-2006 17:49:53


La franja horaria es GMT +2. Ahora son las 16:10:57.


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