In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Monitorar conexão com o Banco de dados MySQL

Foro de Xailer profesional en español
Responder
Sommus
Mensajes: 310
Registrado: Vie Jul 24, 2009 9:39 pm

Monitorar conexão com o Banco de dados MySQL

Mensaje por Sommus »

Prezados desenvolvedores de xailer,
Há alguma maneira de MONITORAR uma conexão com o banco MySQL?
Preciso verificar, num intervalo de tempo (TTimer), ex: a cada 5 segundos,
se o banco está conectado, e atualizar essa informação na tela do sistema.
Tentei isso:
oMySQL:lConnected:=.F.
oMySQL:lConnected:=.T.
Funciona, porém é muito lento, caso não consiga conectar...
Alguma sugestão de como fazer isso?
Obrigado pela atenção,
Reginaldo
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

Reginaldo,
Também tenho esta rotina e quando !lConnected fica
um pouco lento.
No TMySqlDatasource tem a propriedade nTimeOut, mas testei isto e não faz diferença.

Timeout in miliseconds for server connection and any othe query to it.
Scope
Assignable before the connection to the server
Type
Numeric
Initial value
1000

Mário
Sommus
Mensajes: 310
Registrado: Vie Jul 24, 2009 9:39 pm

Monitorar conexão com o Banco de dados MySQL

Mensaje por Sommus »

Desenvolvedores de xailer,
Alguma sugestão?
Obrigado!
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por ignacio »

Buenos dí­as,
Debe de utilizar nTimeOut para controlar las posibles desconexiones.
Xailer utiliza su propio mecanismo para que las conexiones no se pierdan usando el valor nTimeOut como base de cálculo. Reduzca su valor para forzar que los 'pings' a la BD se hagan con más frecuencia.
Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

Ignacio:
O problema é que se nTimeOut=1000 e .not. lConnected, demora quase
10 segundos para responder.
í‰ assim mesmo?
Mário Angelini
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por ignacio »

Mario,
Intente añadir esta función en cualquiera de sus PRG:
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
#include "mysql.h"
HB_FUNC( MYSQL_PING ) // (Handle) --> nResult
{
MYSQL *mysql = (LPVOID) hb_parnl( 1 );
hb_retnl( mysql_ping( mysql ) );
}
#pragma ENDDUMP
Deberá llamarla de la siguiente forrma:
mysql_ping( ::oDataSource:Handle )
Consulte este enlace para más información sobre esa función:
http://dev.mysql.com/doc/refman/5.0/es/mysql-ping.html
Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

Hello Ignacio,
Your code is giving this error:
fatal error: mysql.h: No such file or directory
I dont know if something changes, but we are using MariaDB here.
TIA,
Juliano
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por jfgimenez »

Juliano,
> Your code is giving this error:
>
> fatal error: mysql.h: No such file or directory
To avoid using mysql.h, just try this:
//---------------------------------------------------------- --------------------
#pragma BEGINDUMP
#include "Windows.h"
#include "Xailer.h"
int STDCALL mysql_ping(LPVOID mysql);
HB_FUNC( MYSQL_PING )
{
LPVOID mysql = (LPVOID) hb_parnl( 1 );
hb_retnl( mysql_ping( mysql ) );
}
#pragma ENDDUMP
//---------------------------------------------------------- --------------------
> I dont know if something changes, but we are using MariaDB
> here.
Never mind. MariaDB is fully compatible to MySQL ;-)
Regards,
Jose F. Gimenez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

It worked, thanks for the help José!!
But it unfortunatly does not solve the other problem...
The problem is that when It fails to connect to the server, it takes about 30 seconds to return something... And ignores the ntimeout property.
And the mysql_ping() only works after lConnect is true.
I am sending an example of what is happening.
TIA,
Juliano

Attached files MariaDB TimeOut.zip (3.2 KB)Â
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por jfgimenez »

Juliano,
> It worked, thanks for the help José!!
> But it unfortunatly does not solve the other problem...
> The problem is that when It fails to connect to the server,
> it takes about 30 seconds to return something... And ignores
> the ntimeout property.
Well, if server has been disconnected, then it needs some time to
reconnect, it's normal
> And the mysql_ping() only works after lConnect is true.
Yes, of course.
AFAIU, if the server cannot be reached, there are two possible reasons:
1) the network connection has been shutdown. In that case, the only way
to avoid it is to 'ping' to the server regulary (f.e. every 30 seconds
or so). If that doesn't solve the problem, then the problem is not a
timeout issue, but a hardware disconnection.
2) MySQL (or MariaDB) closes the connection. Like the previous case, it
could be avoided by 'pinging' to the server regulary. You may create a
timer to achieve that task, but you have to be care about errors caused
by launch a query while another query is in the way. F.e., the timer
code could be something like:
TRY
::oMySQLDatasource:GetTables()
CATCH
END
Regards,
Jose F. Gimenez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

Hello José and many thanks for your help and pacience!
But I am not being able to explain very well the issue...
What we want to know is that if is there any way to control
the time that the application is in lBusy state when trying
to reconnect with the server.
TIA,
Juliano
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5705
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por jfgimenez »

Juliano,
> Hello José and many thanks for your help and pacience!
>
> But I am not being able to explain very well the issue... What we want
> to know is that if is there any way to control
>
> the time that the application is in lBusy state when trying
>
> to reconnect with the server.
No, AFAIK. When you try to connect to the server, Xailer just call a
function from libmysql.dll, and that function doesn't return until the
task is completed. So, the program keeps "freezed" until libmysql.dll
returns, and there is nothing we can do.
If the reconnection process is done by calling mysql_ping(), the
scenario is exactly the same, since mysql_ping() is just another
function of libmysql.dll.
Regards,
Jose F. Gimenez
http://www.xailer.com
http://www.xailer.info
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Monitorar conexão com o Banco de dados MySQL

Mensaje por emeasoft »

Oh, I understand Jose, it is something internal in mysql.
Many thanks for your help.
Regards,
Juliano
Sommus
Mensajes: 310
Registrado: Vie Jul 24, 2009 9:39 pm

Monitorar conexão com o Banco de dados MySQL

Mensaje por Sommus »

Caros Ignacio e Jose Gimenez,
Para monitorar minha conexão estou enviando o seguinte comando a cada 1 segundo:
Application:oMainForm:oMySQL:lConnected:=.T.
A propriedade "nTimeOut" do componente "oMySQL" está 1000
Há algum problema em fazer isso?
Há uma forma melhor de fazer?
Obrigado!
Reginaldo
martindelangel
Mensajes: 47
Registrado: Jue Mar 21, 2013 11:26 pm

Monitorar conexão com o Banco de dados MySQL

Mensaje por martindelangel »

Mario Creo entender lo que quieres.
Primero:
Crea un Timer en el formulario principal
en la propiedad nInterval= 60000
Habilitalo lEnabled a .T.
En el Metodo del Timer pon esto:
METHOD TimerMySqlTimer( oSender ) CLASS TMenuPrincipal
::oDBMaria:Ping()
RETURN Nil

oDBMaria es objeto de la conexion a la base de datos , remplazala por nombre que tu usas
Segundo:
Incluye este Prg
DBMysql.prg
::nLastError==2014 // MySQL Command Out if Sync
Cuando el Servidor esta ocupado aqui atrapas el Error.
Me cuentas como te fue.
Saludos...


Attached files DBMySQL.prg (2.4 KB)Â
Responder