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)
-   -   Reconectar con ADOconection (https://www.clubdelphi.com/foros/showthread.php?t=95533)

aromigaret 19-01-2022 17:21:21

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

Neftali [Germán.Estévez] 20-01-2022 08:19:14

Cita:

Empezado por aromigaret (Mensaje 544991)
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'.

Yo he probado tu código por encima y me parece que funciona correctamente.
Reintenta las tres veces que le has programado.
Tarda bastante, pero eso es normal porque la conexión tiene un timeout.

O tal vez no te estoy entendiendo.

aromigaret 20-01-2022 12:49:45

Neftali, gracias por responder. Anoche, despues de mucho buscar en mi codigo, encontré el error, y es que no recordaba que había puesto un timer para que verifique la conexión y allí es la razón de porque volvia a intentar conectarse. Que perdida de tiempo. Saludos


La franja horaria es GMT +2. Ahora son las 17:10:31.

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