Ir al contenido


Foto

Como "cachar" una desconexión ??


  • Por favor identifícate para responder
5 respuestas en este tema

#1 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 16 diciembre 2011 - 11:14

Buen dia compañeros, uso FB 1.5, con componentes IBX y FibPlus, ando investigando como cachar en el momento preciso cuando mi aplicación se desconecta de la base de datos, hice pruebas con los eventos del componente DataBase de los IBX y FibPlus y no se activa ningun evento en el momento preciso de que se desconecta la aplicación de la BD,

La otra idea es poner un Ttimer para estar revisando cuando se desconecta,  pero no me serviría mucho porque tendria que reconectar cada rato el componente TDatabase cuando en realidad no se ocupa.

La idea es tener siempre en conexión mi aplicación, lo que pasa es que la tengo instalada en una "red con antenas", es decir, dichas antenas no son seguras y hay veces que en 1 ó 2 segundos se corta la señal en ese momento deja de funcionar mi aplicación, por eso estoy tratando de cachar algun evento donde me diga que se ha "desconectado".

Alguien tiene alguna otra idea ??

Gracias....
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 17 diciembre 2011 - 05:36

Puedes poner en tu aplicacion que todos los manejos de errores en los forms se procesen primero a nivel de aplicacion, asi tienes un punto común que recibe estos errores, alli compruebas el tipo de error y el mensaje para detectar la desconexion, y si no es ese tipo de error, lo dejas pasar con un raise.

En cada TForm tienes una propiedad para esto, no recuerdo el nombre, y has de definir un manejador de eventos en el application.onerror tomandolo de tu datamodule o algúna otra unit comun a tu programa, normalmente tu application.mainform.

Dentro tienes acceso al error como parámetro, y lleva su Error.Type que sera algo com dbError, asi, en ese caso, miras el error.message a ver si lleva un texto tipo "unable to process request" o el texto que recibas (depende de las version de fbclient.dll que uses, puede vqariar de versión a versión, pero no mucho, y siempre lleva un error code identico), y cambias el mensaje por "Se ha perdido la conexión de la antena", y le haces un raise, o bien no haces raise pero muestras un ShowMessage, o un fomr tipo reintentar, cancelar.

Todo esto es de memoria, seguro que los nombres de las cosas no coinciden en general, pero en nuestras aplicaciones lo hacemos así y detectamos todo tipo de eventos-error para poder "traducirle" al usuario lo ocurrido. Bueno, inicialmente lo hicimos así, ahora usamos un manejador de errores llamado MadExcept que te simplifica u poco esto, mas que nada a nivel de log de errores y envío de informes de error por email (es muy recomendable aunque para uso comercial precisa una licencia).

Si algo de lo que te comento no lo consigues aplicar, dimelo y te busco en mi código los detalles concretos.
  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 17 diciembre 2011 - 07:06

...ando investigando como cachar en el momento preciso cuando mi aplicación se desconecta de la base de datos, ...

Tema altamente interesante, y pensando que el próximo año tengo como misión pasar una aplicación completita a Firemonkey y iPad, debería ponerle atención.

...hice pruebas con los eventos del componente DataBase de los IBX y FibPlus y no se activa ningun evento en el momento preciso de que se desconecta la aplicación de la BD...

Pues a la misma conclusión llegué con los componentes ADO, aún no he tenido tiempo para comprobar con los ClientDataSet, pero sospecho que será exactamente el mismo caso.

...La otra idea es poner un Ttimer para estar revisando cuando se desconecta,  pero no me serviría mucho porque tendria que reconectar cada rato el componente TDatabase cuando en realidad no se ocupa.

Siendo francos, el equipo de trabajo y yo nos decantamos por ésta opción, máxime que el ambiente en que esperamos trabaje nuestra aplicación es bastante más "controlada" y carece del elemento problemático que consignas. Otra opción que tenemos en mente es hacer la comprobación a cada paso que de alguno de los componentes involucrados en el procesamiento, por ejemplo, si vamos a ejecutar una sentencia SQL en un TADOQuery, comprobar y probar la conexión un par de milisegundos (o de instrucciones, pues) ANTES de la ejecución del componente.

Alguna otra solución que se nos ocurrió es hacer la comprobación de la conexión, y en caso de fallo poner los datos en archivos XML para ser monitoreados y actualizados una vez restablecida la conexión a la base de datos...

Como dije, es un tema muy interesante y que necesito resolver al igual que tú. Saludines.
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 17 diciembre 2011 - 08:00

Al menos con IBX tienes la propiedad Conected que justamente sirve para determinar si está conectado o no, si al evaluar la propiedad detectas un False es que no hay conexión activa y procedes a reconectar.

Por otro lado, no es buena idea mezclar componentes de suites diferentes... O utilizas IBX ó FibPlus, pero no mezcles ambos en una misma aplicación... por las dudas.

Saludos,
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.301 mensajes
  • LocationArgentina

Escrito 17 diciembre 2011 - 08:14

Ha... ya veo cual es el problema.
Tu te refieres a cuando se pierde la conexión sin avisos. Una manera de forzar si hay una conexión es con la función TestConected (IBX).
TestConected regresa true si puede lograr una conexión, en otro caso false.

O sino como te ha comentado Sergio, capturar las excepciones buscando aquella cuyo error code sea la de una falla en la conexión.

Saludos,
  • 0

#6 agag4

agag4

    Advanced Member

  • Miembros
  • PipPipPip
  • 298 mensajes
  • LocationMéxico

Escrito 17 diciembre 2011 - 10:02

Muchas gracias a todas sus respuestas, son muy valiosas, de hecho me dieron muy buenas ideas, que tengan buen día.... les cuento como me fue....
  • 0




IP.Board spam blocked by CleanTalk.