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)
-   -   Conocer si un programa está conectado en local o remoto (https://www.clubdelphi.com/foros/showthread.php?t=92716)

acanogal 09-01-2018 20:41:28

Conocer si un programa está conectado en local o remoto
 
Hola a todos y Feliz 2018!!

Actualmente para saber si un programa se ejecuta en local o remoto usamos la siguiente función:
Código Delphi [-]
class function TSqlConfig.EstoyEnServidor: Boolean;
var
  vBaseDatos:TFDConnection;
  vConfig: TSqlConfig;
begin
  //Intento una conexion con la base de datos en modo local (localhost)
  vConfig := TSqlConfig.ReadIni;
  if Assigned(vConfig) then
    try
      try
        vBaseDatos:=TFDConnection.Create(nil);
        vBaseDatos.Params.Assign(TSqlConfig.ConnectionParams('localhost',vConfig.Port,vConfig.Path));
        Result := vBaseDatos.Ping;
      except
        On Exception do
          Result := false;
      end
    finally
      vBaseDatos.Free;
    end;
end;

Evidentemente, cuando la conexión es remota se genera una excepción y el consiguiente retardo en el tratamiento de la excepción, además del tiempo de conexión.

¿Conocéis alguna forma más eficiente de hacer esto?

mamcx 09-01-2018 22:33:14

No.

La unica forma de saber si hay conexion es conectandose.

Sin embargo, se puede jugar un poco sobre COMO NOTIFICAR el hecho. En tu caso, estas haciendo una llamada sincronica. Hacerlo asincronico es mas "eficiente" de miras al cliente. Tambien depende de que tan *preciso* quieres que sea la evaluacion.

EL tema es reconocer que aunque leas EstoyEnServidor y te diga que si, un MILISEGUNDO DESPUES PUEDE SER NO. Osea, que SIEMPRE estas evaluando el PASADO.

Si estas haciendo el chequeo para mostrar a el usuario puede ser "optimista" y no preocuparte por cambios en los ultimos segundos/minutos (junto a evaluar si el OS reporta caida en la conexion es mas que suficiente).

Si lo "necesitas" pa saber si puedes o no hacer una llamada remota....

ESO ES IMPOSIBLE.

La UNICA forma de saber con certeza si hay conexcion, es conectandose. La UNICA forma de saber si un llamada remota se ejecuta, es ejecutando la llamada remota.

TODO LO DEMAS ES ESPECULATIVO.

acanogal 10-01-2018 17:12:33

Ok. Gracias por la respuesta.

Si se me ocurre otro modo de hacer lo pondré aquí para otros.


La franja horaria es GMT +2. Ahora son las 22:36:03.

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