Ver Mensaje Individual
  #1  
Antiguo 19-01-2022
aromigaret aromigaret is offline
Miembro
 
Registrado: jun 2011
Posts: 68
Reputación: 13
aromigaret Va por buen camino
Reconectar con ADOconection

Buen día,
Estoy desarrollando un sistema que se conecta por LAN a una base de datos Server SQL 2014. Mientras haya acceso a la red, funciona perfecto, el problema esta cuando alguna vez se pierde la conexión. Para ello escribí la siguiente función, la cual al tercer intento que no se conecta, pregunta si sigue intentando o aborta la conexión y cierra el sistema.


Código Delphi [-]
function Tform1.CONECTAR;
VAR
  I:INTEGER;
begin

  I:=1;
  PANEL_INTENTOS.Show;        // MUESTRO EL PANEL DONDE FIGURAN LOS INTENTOS DE CONEXION
  PANEL_INTENTOS.Repaint;

  RESULT:=TRUE;

  WHILE (CONEXION_A_BASE.Connected = FALSE) AND ( I < 4 ) DO        // SI NO ESTA CONECTADA INICIO EL CICLO
  begin

    try

      CONEXION_A_BASE.Open;
      RESULT:=TRUE;
      BREAK;

    EXCEPT

      ON E:EXCEPTION DO      // SI NO ESTA CONECTADA
      BEGIN

        // CONEXION_A_BASE.Close;

        INC(I);
        if (I > 3) and (MESSAGEDLG('NO PUEDO CONECTARME AL SERVIDOR, VERIFIQUE LA CONEXION.' + CHR(13) +
 '¿ VUELVO A INTENTAR ?',MTERROR,[MBYES,MBNO],0,MBYES) = MRYES) THEN I:=1;

        INTENTOS.Caption:=INTTOSTR(I);
        INTENTOS.Repaint;

        RESULT:=FALSE;

      END;

    end;

  end;

  PANEL_INTENTOS.Hide;

end;

El problema radica en que, si la persona se obsesiona con intentar conectar cuando no hay conexion (Yo lo simulo habilitando/deshabilitando la LAN), el sistema se ralentiza. Al ejecutar el debuger, veo que cuando muestra en pantalla el mensaje de seguir intentando o no, aparece constantemente el error de conexión, es como si siguiera intentado conectar indefinidamente, el mensaje es el siguiente:

Project Facturar.exe raised exception class EOleException with message '[DBNETLIB][ConnectionOpen
(Connect()),]No existe el servidor SQL Server o se ha denegado el acceso al mismo'.

Si dejo sin comentarios la linea "CONEXION_A_BASE.Close" el sistema se ralentiza aun mas. si pongo un CONEXION_A_BASE.destroy da error de modulo.
He buscado por todos lados y no hallé la solución de como hacer para que deje de intentar conectarse, espero alquien pueda darme una mano.
Desde ya muchas gracias

Última edición por Neftali [Germán.Estévez] fecha: 19-01-2022 a las 17:48:05. Razón: Corregir salto de linea para ajustar a la ventana
Responder Con Cita