He pensado en utilizar algunas de las ideas de los programitas para hacer ping y cuando me de el visto bueno del ping, entonces intentar conectarme a la base de datos de nuevo.
El problema esta en donde detener la ejecucion del programa y poder poner el codigo del ping.
He hecho esto despues de cada open de los querys del form principal y mas o menos funciona bien, ya por lo menos despues de unos click se cierra el programa. La idea es depurarlo y poner la parte de un form que haga el ping o algo asi.
delphi
procedure TFRMactivasred.Timer1Timer(Sender: TObject); begin dmmonitorenred.zqcentral.Close; dmmonitorenred.zqcentral.sql.Clear; dmmonitorenred.zqcentral.SQL.add('select * from central left join acmsub on central.csid=acmsub.csid left join evento on central.evento=evento.evento') ; dmmonitorenred.zqcentral.SQL.Add('where entradadatos > ' + quotedstr(inttostr(buscentral))); dmmonitorenred.zqcentral.SQL.Add('order by entradadatos desc'); try dmmonitorenred.zqcentral.open; except On e: exception do if e.ClassName = 'EZSQLException' then begin ShowMessage('no hay conexion a la base de datos'); FRMactivasred.Close; end; end; if dmmonitorenred.zqcentralENTRADADATOS.AsInteger > buscentral then begin with DMmonitorenred do FRMactivasred.ListBox1.Items.Add(zqcentralfechan.AsString+ ' ' + zqcentralDETALLE.AsString +' ' + zqcentralCSID.AsString + ' ' + zqcentralCLIENTES.AsString + ' ' + zqcentralEVENTO.AsString + ' ' + zqcentralDETALLE_1.AsString + ' ' + ' ' +zqcentralTELEFONO.AsString + ' entradadatos # '+ zqcentralENTRADADATOS.AsString ); FRMactivasred.ListBox1.Items.Add(' '); FRMactivasred.ListBox1.TopIndex := -1 + FRMactivasred.ListBox1.Items.Count; buscentral:=dmmonitorenred.zqcentralentradadatos.AsInteger; dmmonitorenred.zqcentral.Next; end; dmmonitorenred.zqpendientes.Close; dmmonitorenred.zqpendientes.SQL.Clear; dmmonitorenred.zqpendientes.SQL.Add('select first 1 * from activas '); dmmonitorenred.zqpendientes.SQL.Add(' where alarmnum > ' + quotedstr(inttostr(buscar)) ); dmmonitorenred.zqpendientes.SQL.Add('order by alarmnum desc'); try dmmonitorenred.zqpendientes.Open; except On e: exception do if e.ClassName = 'EZSQLException' then begin ShowMessage('no hay conexion a la base de datos'); FRMactivasred.Close; end; end; if dmmonitorenred.zqpendientesalarmnum.ASINTEGER > buscar then begin dmmonitorenred.zqactivas.Close; dmmonitorenred.zqactivas.SQL.Clear; dmmonitorenred.zqactivas.SQL.add('select first 100 * from Activas inner join evento on activas.evento=evento.evento left join acmsub on activas.csid=acmsub.csid '); dmmonitorenred.zqactivas.SQL.add(' where completa <> :pcompleta '); //'+ 'COMPLETADA'); //debe ser buscando los que estan pendientes dmmonitorenred.zqactivas.SQL.Add('order by alarmnum desc'); DMmonitorenred.ZQactivas.ParamByName('pcompleta').AsString:='COMPLETADA'; try dmmonitorenred.zqactivas.Open; except On e: exception do if e.ClassName = 'EZSQLException' then begin ShowMessage('no hay conexion a la base de datos'); FRMactivasred.Close; end; end; SONIDO.Show; buscar:=dmmonitorenred.zqpendientesalarmnum.ASINTEGER; End; end;