PDA

Ver la Versión Completa : Cuando falla la conexión


JLR
25-10-2007, 19:04:42
Hola gente.
Para evitar tener que reinstalar en todas las estaciones de trabajo, decidí simplemente que se ejecutarían directamente del servidor con la siguiente forma :

\\servidor\miprograma\miprograma.exe (file://\\servidor\miprograma\miprograma.exe)

Todo funciona Ok.
El problema es que quiero atrapar el error de fallo de conexión, es decir con el programa abierto me voy a un equipo de la red y le quito el cable.
Obtengo un par de errores uno del tipo "Unable to complete network resquest to host : xxx.xxx.xxx.xxx"
El problema es que cuando intento hacer cualquier cosa con el programa ya no obtengo otra cosa que no sea "Excepción external c0000006", y he leido que es por un problema de la red.
Si le pasa a algún cliente, sabemos que es problema de la red, pero quiero atrapar el error.
¿ Alguien ha hecho algo para que esto no pase ?
Salu2
JLR

Lonidas
26-10-2007, 00:55:54
Hola, podrias usar el componente TApplicationEvent para capturar el mensaje de error y poner el mensaje que tu quieras...

JLR
29-10-2007, 12:02:36
Gracias por contestar.
En realidad si puedo sacar el error, pero no puedo manejarlo. El error es tan grave que no se recupera.
Salu2

Lepe
29-10-2007, 18:46:44
Hola JLR:

Más o menos deducía lo que ocurría, pero dado que no soy gurú en estos temas, he reproducido tu error y de hecho obtengo el EExternalException.

En el ApplicationsEvents:

if e is EExternalException then
begin
s := TStringList.Create;
s.Add('error grave');
s.SaveToFile('c:\Miprograma\NetworkError\mio.txt'); // atención a la carpeta NetWorkError ;)
FrmErrorGrave.ShowModal;
Application.Terminate;
end;


El Application.Terminate no ayudará mucho, porque el Sistema Operativo también lo hará por nosotros.

Si necesitas mostrar un mensaje en tu ordenador "Cliente", puedes crear una ventana informando al usuario de los sucesivos errores que va a dar el programa.

En el lado servidor, podrías tener un programa monitoreando la carpeta 'NetworkError' que permita informarte (mediante correo, un sonido, etc) del problema.


Saludos y Suerte!!

tefots
29-10-2007, 21:33:59
y no seria mejor hacer un programita o una especie de acceso directo , que lo que haga sea copiar el programa del servidor a una carpeta local y luego ejecutarlo localmente en cada máquina ?.
bueno, lo ideal seria que dicho acceso directo o programita , se encargara de ver si el ejecutable del servidor es distinto (tamaño en bytes) y solo copiarlo en ese caso.
con esto te aseguras que todo el mundo lo tenga actualizado y todo el mundo lo ejecuta localmente y no por la red.

aun así , seguiras teniendo problema si el servidor o la red cae , pero será mas controlable por la aplicación.

saludos.

JLR
31-10-2007, 10:04:26
Muy bueno Lepe.
Los grandes problemas tienen pequeñas soluciones.
Lo he metido del tirón en el código ( algo parecido ), pero no he tenido tiempo de probar. (Seguro que funciona).
Ya hablaremos
Salu2
JLR

JLR
31-10-2007, 10:06:39
Efectivamente compañero.
Esa era una opción que la dejaba como última, ya que tengo casi 450 usuarios en múltiples instalaciones.
Imagino que por muy fácil que lo ponga siempre tendremos que dar explicaciones .
Salu2
JLR

Lepe
31-10-2007, 12:03:42
No creo que haya problemas al explicar este fallo, siempre que se haga de forma entendible:

" a ver, tú estas comiendo un plato de sopa, y llego yo y te quito la cuchara, ¿puedes seguir comiendo sopa?"

Normalmente explicaciones de este tipo arrancan una sonrisa del interlocutor, después se explica claramente el problema: "aunque no estés haciendo nada el programa usa la red para mantener la conexión con la base de datos, que está en el servidor, si falla la red, no hay comunicación posible , etc, etc".

Saludos

Ivanzinho
31-10-2007, 12:56:32
No creo que haya problemas al explicar este fallo, siempre que se haga de forma entendible:

" a ver, tú estas comiendo un plato de sopa, y llego yo y te quito la cuchara, ¿puedes seguir comiendo sopa?"

Saludos

Mejor diles que les quitas el plato, que los usuarios te responden cualquier cosa. :D

Un saúdo.