Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manejo de errores de conexion con MySQL (https://www.clubdelphi.com/foros/showthread.php?t=96490)

ArtPortEsp 16-11-2023 15:56:59

Manejo de errores de conexion con MySQL
 
Hola, amigos;

en una aplicación de Delphi 7 estoy queriendo manejar los errores de conexión perdida que por "tiempo de espera superado" les aparecen a los usuarios eventualmente.

Para no repetir una estructura Try...Except en todas las operaciones a la base de datos (OPEN, EXECUTE, DELETE, etc.) pensé crear un procedimiento en el DM al cual llamar y que desde ahí se manejara la excepción, aparentemente parece funcionar (aún no he remplazado todas las llamadas a la BD con ese procedimiento), pero estoy casi seguro que debe haber una mejor y más elegante forma de hacerlo, así que por favor, si después de revisar el código y analizando mi necesidad tienen alguna sugerencia para mejorarlo o de plano reemplazarlo, por favor coméntenlo.

Nota:
el código solo tiene las llamadas OPEN a la base de datos por el momento

Código Delphi [-]
procedure TDM.OperacionBD(xcontrol : TMyQuery; xoperacion : string);
var
     x : integer;
begin
     try
          if xoperacion='OPEN' then xcontrol.Open;
     except
          on E: EMyError do
          begin
               if Ansipos('connection',E.Message) > 0 then
               begin
                     MessageDlg(' Conexion a la BD caida, tratando de reconectar.', mtError, [mbOK], 0);
                    For x := 0  to 4 do
                    begin
                         DM.Dirdatos.Connect;
                         if DM.Dirdatos.Connected then Break;
                    end;
                    if DM.Dirdatos.Connected = false then
                    begin
                          MessageDlg('No fue posible reconectar la BD, revisa tu conexion a la red.', mtError, [mbOK], 0);
                         TerminateProcess(GetCurrentProcess, 0);
                         Exit;
                    end;
               end;
          end;
    end;
end;

pgranados 16-11-2023 17:21:28

Revisa los eventos de tus componentes para el manejo de las excepciones

ArtPortEsp 16-11-2023 17:28:06

Ya lo hice, creo que algo me falta de entender en ese apartado; uso los componentes MyDAC de DEVexpress.

En el componente de conexión hay un evento ONConnectionLost que se supone debe ayudar con eso, pero el código que he encontrado en internet no ayuda en nada y no reconecta, se supone que debe ser algo tan simple como:

Código Delphi [-]
procedure TDM.DirdatosConnectionLost(Sender: TObject; Component: TComponent; ConnLostCause: TConnLostCause;  var RetryMode: TRetryMode);
begin
     RetryMode :=  rmReconnectExecute;
end;

(por si alguien conoce el componente - ya puse la propiedad LocalFailOver en True -)


La franja horaria es GMT +2. Ahora son las 10:49:39.

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