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)
-   -   Perdida de Conexión con TADOConnection (https://www.clubdelphi.com/foros/showthread.php?t=88770)

adripugliesso 29-07-2015 13:09:14

Perdida de Conexión con TADOConnection
 
Buenos días, tengo una aplicación que se conecta a una base de datos SQL Server 2005 a través del un componente TADOConnection, el problema es que cuando la aplicación por algún motivo pierde la conexión con la Base de Datos (problemas de LAN, etc) empieza a tirar "Error en Vinculo de Comunicación" y no para hasta que cierro la aplicación y la vuelvo a abrir. Hay alguna manera de trabajar sobre ese error, evitar ese mensaje, que avise que no tiene conexión desde la aplicación y poder aguardar a que la conexión vuelva??

AgustinOrtu 29-07-2015 19:43:46

Revisa la propiedad KeepConnection y los eventos OnDisconnect, BeforeDisconnect, AfterDisconnect y BeforeConnect

adripugliesso 30-07-2015 00:34:50

No lo puedo hacer funcionar con esos eventos.-

Casimiro Notevi 30-07-2015 00:49:28

Cita:

Empezado por adripugliesso (Mensaje 495032)
No lo puedo hacer funcionar con esos eventos.-

¿Por qué?



.

adripugliesso 31-07-2015 23:05:31

Estuve haciendo pruebas y cuando se pierde la conexión TCP del componente TADOConnetion la aplicación tira el error y se traba, use los eventos OnDisconnect, BeforeDisconnect, AfterDisconnect y BeforeConnect pero no hacen nada cuando se corta la conexión aparece este error: "Proveedor de TCP: Se ha forzado la interrupción de una conexión existente por el host remoto" y se traba todo.-

ecfisa 01-08-2015 01:02:02

Hola adripugliesso.

Sin saber como está configurada la conexión y ni siquiera una línea de código, es muy difícil poder sugerirte algo.

Saludos :)

adripugliesso 01-08-2015 15:59:08

En una LAN común, una de las PC tiene el SQL server 2005, entonces desde la otra la accedo con una aplicación básica 1 form con un TADOConnection, y una consulta con un TADOQuery a la PC con el SQL, conecto el ADOConnection en el evento ONSHOW del form y a través de un TButtom actualizo el TADOQuery haciendo un (CLOSE/OPEN), teniendo el cable de red conectado anda todo perfecto, pero cuando saco el cable de red de la PC y presiono el TButton para actualizar el TADOQuery tira el siguiente error: "Proveedor TCP: Se ha forzado la interrupción de una conexión existente por el host remoto" y se traba la aplicación. Lo que yo quiero es evitar eso y que simplemente me muestre un Showmessage diciendo que se perdió conexión con la DB y que vuelva a intentar mas tarde y luego al conectarle el cable de red el sistema siga funcionando normalmente.-

adripugliesso 01-08-2015 16:21:56

SOLUCIONADO:

Agrege un TApplicationEvents y en USES ComObj;

y luego en el evento OnException del TApplicationEvents

Código Delphi [-]
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
var
  EO:EOLEException;
begin
  if E is EOLEException then
  begin
    EO:=EOLEException(E);
    if (EO.ErrorCode = -2147467259) then
      //error de conexion (disconnected)
      begin
        try
          try
            ADOConnection1.Close;
          except;
          end;
          ADOConnection1.Open;
          ShowMessage('FALLA EN LA CONEXION A LA BASE DE DATOS - Reestableciendo, vuelva a intentar!');
        except
          on E:Exception do
            ShowMessageFmt('FALLA EN LA CONEXION A LA BASE DE DATOS!.  '
            + 'Por favor, intente luego!.'#13'Error message: %s', [E.Message]);
          end;
      end
      else
        ShowMessage(E.Message + ' ' + IntToStr(EO.ErrorCode));
    end
  else
    ShowMessage(E.ClassName + #13 + E.Message);

end;

Casimiro Notevi 01-08-2015 17:38:31

Muy bien, pero una curiosidad: ¿por qué le quitas el cable de red? :confused:

adripugliesso 01-08-2015 19:00:57

para simular cortes de red y probar de esta manera si la aplicación funciona ante un corte.-


La franja horaria es GMT +2. Ahora son las 11:03:57.

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