(Este mensaje es igual al anterior, con la corrección del código)
Hola:
he desarrollado un programa usando el Delphi 2009, consta de un módulo servidor y otro cliente, usando tecnología DataSnap, muy buena por cierto.
El módulo cliente tiene la habilidad de detectar si el usuario está en la conexión LAN de su trabajo o WAN si está fuera de la oficina para poder conectar a la Base de Datos.
Existe una IP Privada para la LAN y otra IP pública para la WAN y la forma que se me ha ocurrido para detectar el tipo de red a la que debe conectarse no es otra que usando lo siguiente:
Código Delphi
[-]
procedure TDM.DataModuleCreate(Sender: TObject);
var
PathLocal, PathServidor: string;
NombreExe: PChar;
begin
NombreExe := 'NombrePrograma';
PathLocal := 'C:\Aplicaciones\'+NombreExe+'.exe';
SQLConnection.Close;
SQLConnection.Params.Clear;
SQLConnection.Params.Add('Port=nnnn');
SQLConnection.Params.Add('User_Name=sa');
SQLConnection.Params.Add('Password=********');
IpFtp := 'IP.PRIVADA';
SQLConnection.Params.Add('HostName='+IpFtp);
PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
if FileExists(PathServidor) then begin
Conexion := 'Conexión vía LAN';
end
else begin
IpFtp := 'IP.PUBLICA';
SQLConnection.Params.Delete(SQLConnection.Params.Count-1);
SQLConnection.Params.Add('HostName='+IpFtp);
PathServidor := '\\'+IpFtp+'\wwwroot\Aplicaciones\'+NombreExe+'.exe';
if FileExists(PathServidor) then begin
Conexion := 'Conexión vía WAN';
end
else begin
ShowMessage('No se ha podido conectar vía LAN ni WAN');
EXIT;
end;
end;
end;
El código anterior, que solo muestra lo principal, funciona. Lo malo que tiene que la instrucción 'FileExists' es muy lenta y en ocaciones cuando se está fuera de la oficina demora cerca de 2 minutos en dar respuesta.
Mi pregunta es: ¿Conocen otra técnica, que responda mas rápidamente en reemplazo alo que utilizo actualmente?
Mucha gracias