Hola amigos como estan?
Tengo una aplicacion en la cual debo revisar constantemente si hay nuevos registros. Antes tenia un timer y con este enviaba cada 1/2 segundo un query para saber si habia llegado algo. si habia algun problema con el query entonces me daba cuenta que la conexion estaba mal.
Ahora lo estoy haciendo utilizando los eventos de firebird after insert, after update y quisiera saber cual es la mejor forma de monitorear que no se haya perdido la conexion con la base de datos?
monitorear conexion con base de datos firebird
Started by
luk2009
, Jan 21 2011 01:27 PM
4 replies to this topic
#1
Posted 21 January 2011 - 01:27 PM
#2
Posted 21 January 2011 - 02:03 PM
Q tal luk2009, creo yo que si estas evaluando el posible problema de conexión de tu(s) aplicacion(es) clientes que se conectan a tu base de datos desde donde se encuentra tu servidor central, esta consulta puede funcionarte, al menos con interbase me funciona, algunos ajustes posiblemente serían necesarios:
Esta es una consulta que por default trae ibexpert y puedes conocer cuales ip's estan conectadas y bueno, si alguna no aparece por cierto tiempo, pues posiblemente tiene un problema. Independientemente si ha hecho algo en alguna tabla o no, mientras la conexión este abierta, te va aparecer en la consulta.
Pero si deseas que la aplicación cliente te notifique de un problema, tal vez halla más opciones, desde enviarte un email o sms comunicando el problema de conexión.
Espero haber comprendido tu problema.
Saludos.
sql
SELECT TMP$ATTACHMENT_ID AS "Attachment ID", TMP$DATABASE_ID AS "Database ID", TMP$STATEMENTS AS "Compiled Statements", TMP$TRANSACTIONS AS "Active Transactions", TMP$TIMESTAMP AS "Established At", TMP$QUANTUM AS "Units of Execution", TMP$USER AS "User Name", TMP$USER_IP_ADDR AS "User IP", TMP$USER_HOST AS "User Host", TMP$USER_PROCESS AS "Process ID", TMP$STATE AS "State" FROM TMP$ATTACHMENTS
Esta es una consulta que por default trae ibexpert y puedes conocer cuales ip's estan conectadas y bueno, si alguna no aparece por cierto tiempo, pues posiblemente tiene un problema. Independientemente si ha hecho algo en alguna tabla o no, mientras la conexión este abierta, te va aparecer en la consulta.
Pero si deseas que la aplicación cliente te notifique de un problema, tal vez halla más opciones, desde enviarte un email o sms comunicando el problema de conexión.
Espero haber comprendido tu problema.
Saludos.
#3
Posted 21 January 2011 - 11:16 PM
Gracias Fredycc por tu respuesta.
Si entiendo bien lo que dices, esta consulta me sirve desde el servidor, pero lo que quiero es que software cliente se de cuenta si la conexion no esta funcionando. Hasta ahora cuando se fallaba el query que estaba en el timer, yo hacia esto:
pero el metodo aunque funciona, me dispara algunos errores en pantalla.
Si entiendo bien lo que dices, esta consulta me sirve desde el servidor, pero lo que quiero es que software cliente se de cuenta si la conexion no esta funcionando. Hasta ahora cuando se fallaba el query que estaba en el timer, yo hacia esto:
delphi
procedure TFRMreconexion.FormShow(Sender: TObject); begin {$I-} FRMactivasred.Timer1.Enabled:=false; Timerconexion.Enabled:=true; end; procedure TFRMreconexion.TimerconexionTimer(Sender: TObject); begin IdIcmpClient1.Host:='10.0.0.2'; IdIcmpClient1.ReceiveTimeout:=2000; IdIcmpClient1.Ping('Prueba de IP correcta',0); if (inttostr(IdIcmpClient1.ReplyStatus.BytesReceived))<>'0' then begin Label1.Caption:='SE CONECTO NUEVAMENTE' +(inttostr(IdIcmpClient1.ReplyStatus.BytesReceived)); DMmonitorenred.ZConmonred.Disconnect; DMmonitorenred.ZConmonred.Connect; FRMactivasred.Timer1.Enabled:=true; {$I+} Timerconexion.Enabled:=false; FRMreconexion.Close; FRMreconexion.ModalResult:=mrnone; end else begin FRMreconexion.Color:=clred; label1.Color:=clYellow; end; end;
pero el metodo aunque funciona, me dispara algunos errores en pantalla.
#4
Posted 22 January 2011 - 09:29 PM
No se me ocurre otra forma de comprobar que no se haya caído la conexión, que haciendo lo que hacías antes : lanzar una consulta cada poco tiempo.
Naturalmente puedes lanzar una consulta bien sencilla, para no sobrecargar el servidor ni la Red. Por ejplo :
select 1 as ACTIVO
from RDB$DATABASE
Saludos.
Naturalmente puedes lanzar una consulta bien sencilla, para no sobrecargar el servidor ni la Red. Por ejplo :
select 1 as ACTIVO
from RDB$DATABASE
Saludos.
#5
Posted 22 January 2011 - 10:22 PM
Gracias Marc por tu respuesta.
Dejame ponerme a depurar mi codigo de reconexion.
Dejame ponerme a depurar mi codigo de reconexion.