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.

control de usuarios

Foro público de Xailer en español
Responder
jjgp2
Mensajes: 47
Registrado: Jue May 12, 2011 12:57 am
Ubicación: México
Contactar:

control de usuarios

Mensaje por jjgp2 »

Buenas noches

Hay alguna forma de controlar el numero de usuarios a entrar en un sistema

por su ayuda mil gracias
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: control de usuarios

Mensaje por bingen »

Buenas tardes, se puede hacer de diversas maneras, pero antes de nada ¿el programa usa MySql o MariaDb? por que de eso depende la mejor respuesta.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
jjgp2
Mensajes: 47
Registrado: Jue May 12, 2011 12:57 am
Ubicación: México
Contactar:

Re: control de usuarios

Mensaje por jjgp2 »

bingen escribió:Buenas tardes, se puede hacer de diversas maneras, pero antes de nada ¿el programa usa MySql o MariaDb? por que de eso depende la mejor respuesta.

Salu2.
Gracias por responder uso mariadb
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: control de usuarios

Mensaje por bingen »

Pues entonces puedes preguntar a la base de datos cuanta gente hay conectada a ella y listo, en cuanto salen del programa se desconectan. Es el método más sencillo y seguro.

A ver si te vale con esto, tendrás que adaptarlo a tu sistema.


//------------------------------------------------------------------------------
//
// NetUsers(lActivos, lMenosYo , lShow, lDetailed)
// Función ......: Devuelve todos los usuarios de la base de datos o solo aquellos que estén activos (que tengan la BD en uso)
// Parámetros ...: lActivos Por defecto .F.
// lMenosYo Elimina el usuario activo que efectua la pregunta de la lista
// lShow Muestra una ventana con el resultado solo en caso de que lActivos = .T.
// lDetailed Añade al array información de la estación.usuario de Windows del PC utilizado por el usuario el último acceso
// Returns .....: aUsuarios
//
METHOD NetUsers(lActivos, lMenosYo, lShow, lDetailed) CLASS tMySqlInitial
Local oSqlDb, aUsuarios:={}, nItem:=0, lExit:=.F., cUserList:=""

Default lActivos To .F.
Default lMenosYo To .F.
Default lShow To .F.
Default lDetailed To .F.

aUsuarios:=Appdata:oSqlDb:QueryArray("show processlist")

If !lActivos
aUsuarios:=ArrayCol(Appdata:oSqlDb:QueryArray("select distinct user from mysql.user where user<>'root' order by user"),1)
Else
Do While !lExit
aUsuarios := Appdata:oSqlDb:QueryArray("show processlist")

For nItem := 1 to Len(aUsuarios)
IF ((!Appdata:lMultiSqlDb .And. Lower(Allstring(aUsuarios[nItem,4]))<>Lower(Allstring(Appdata:cSqlDbName))) .Or. ;
(Appdata:lMultiSqlDb .And. Lower(Left(Allstring(aUsuarios[nItem,4]),Len(Allstring(aUsuarios[nItem,4]))-4))<>Lower(Left(Allstring(Appdata:cSqlDbName),Len(Allstring(Appdata:cSqlDbName))-4)) )) .Or. ;
Lower(Allstring(aUsuarios[nItem,2]))="root" .Or. Lower(Allstring(aUsuarios[nItem,2]))="event_scheduler"
ArrayDel(aUsuarios,nItem,.T.)
nItem--
ElseIF lMenosYo .And. Lower(Allstring(aUsuarios[nItem,2]))=Lower(Appdata:cUserName)
ArrayDel(aUsuarios,nItem,.T.)
nItem--
Else
aUsuarios[nItem,2]:=NameCase(aUsuarios[nItem,2])
Endif

Next
aUsuarios:=ArrayUnique(ArrayCol(aUsuarios,2),1)
aUsuarios:=Asort(aUsuarios)

If lDetailed
cUserList:=""
for nItem:= 1 to Len(aUsuarios)
aUsuarios[nItem]:={aUsuarios[nItem],NameCase( Appdata:oSqlDb:Queryvalue( "select DeskTopName from " + Appdata:cControlDatabase + ".Usuarios where Usuario='"+aUsuarios[nItem]+"'" ) )}
cUserList+="Usuario: "+aUsuarios[nItem,1]+" Puesto: "+aUsuarios[nItem,2]+CRLF
Next
Else
cUserList:=Concat(aUsuarios,CRLF)
Endif

If lShow
MsgWait(IF(AppData:nLicence>0,"/ Licencias "+AllTrim(Str(Int(AppData:nLicence)))+CRLF+CRLF,"")+;
"Total de usuarios activos: <b>"+AllString(Len(aUsuarios))+"</b>"+CRLF+CRLF+;
cUserList+CRLF+CRLF+"Pulse y mantenga <b>[Esc]</b> para salir.",;
"Usuarios activos de la BBDD "+IF(!Appdata:lMultiSqlDb,Allstring(Appdata:cSqlDbName),Left(Allstring(Appdata:cSqlDbName),Len(Allstring(Appdata:cSqlDbName))-4)+"%"))
lExit:=lAnd( GetAsyncKeyState( 27 ), 0xFFF0 )
Else
Exit
Endif
Enddo

Endif

Return aUsuarios
BiSoft Desarrollo de software profesional
http://www.bisoft.es
jjgp2
Mensajes: 47
Registrado: Jue May 12, 2011 12:57 am
Ubicación: México
Contactar:

Re: control de usuarios

Mensaje por jjgp2 »

Muchas gracias voy a realizar los cambios pertinentes para aplicarlo a mi sistema y te aviso como me fue
bingen escribió:Pues entonces puedes preguntar a la base de datos cuanta gente hay conectada a ella y listo, en cuanto salen del programa se desconectan. Es el método más sencillo y seguro.

A ver si te vale con esto, tendrás que adaptarlo a tu sistema.


//------------------------------------------------------------------------------
//
// NetUsers(lActivos, lMenosYo , lShow, lDetailed)
// Función ......: Devuelve todos los usuarios de la base de datos o solo aquellos que estén activos (que tengan la BD en uso)
// Parámetros ...: lActivos Por defecto .F.
// lMenosYo Elimina el usuario activo que efectua la pregunta de la lista
// lShow Muestra una ventana con el resultado solo en caso de que lActivos = .T.
// lDetailed Añade al array información de la estación.usuario de Windows del PC utilizado por el usuario el último acceso
// Returns .....: aUsuarios
//
METHOD NetUsers(lActivos, lMenosYo, lShow, lDetailed) CLASS tMySqlInitial
Local oSqlDb, aUsuarios:={}, nItem:=0, lExit:=.F., cUserList:=""

Default lActivos To .F.
Default lMenosYo To .F.
Default lShow To .F.
Default lDetailed To .F.

aUsuarios:=Appdata:oSqlDb:QueryArray("show processlist")

If !lActivos
aUsuarios:=ArrayCol(Appdata:oSqlDb:QueryArray("select distinct user from mysql.user where user<>'root' order by user"),1)
Else
Do While !lExit
aUsuarios := Appdata:oSqlDb:QueryArray("show processlist")

For nItem := 1 to Len(aUsuarios)
IF ((!Appdata:lMultiSqlDb .And. Lower(Allstring(aUsuarios[nItem,4]))<>Lower(Allstring(Appdata:cSqlDbName))) .Or. ;
(Appdata:lMultiSqlDb .And. Lower(Left(Allstring(aUsuarios[nItem,4]),Len(Allstring(aUsuarios[nItem,4]))-4))<>Lower(Left(Allstring(Appdata:cSqlDbName),Len(Allstring(Appdata:cSqlDbName))-4)) )) .Or. ;
Lower(Allstring(aUsuarios[nItem,2]))="root" .Or. Lower(Allstring(aUsuarios[nItem,2]))="event_scheduler"
ArrayDel(aUsuarios,nItem,.T.)
nItem--
ElseIF lMenosYo .And. Lower(Allstring(aUsuarios[nItem,2]))=Lower(Appdata:cUserName)
ArrayDel(aUsuarios,nItem,.T.)
nItem--
Else
aUsuarios[nItem,2]:=NameCase(aUsuarios[nItem,2])
Endif

Next
aUsuarios:=ArrayUnique(ArrayCol(aUsuarios,2),1)
aUsuarios:=Asort(aUsuarios)

If lDetailed
cUserList:=""
for nItem:= 1 to Len(aUsuarios)
aUsuarios[nItem]:={aUsuarios[nItem],NameCase( Appdata:oSqlDb:Queryvalue( "select DeskTopName from " + Appdata:cControlDatabase + ".Usuarios where Usuario='"+aUsuarios[nItem]+"'" ) )}
cUserList+="Usuario: "+aUsuarios[nItem,1]+" Puesto: "+aUsuarios[nItem,2]+CRLF
Next
Else
cUserList:=Concat(aUsuarios,CRLF)
Endif

If lShow
MsgWait(IF(AppData:nLicence>0,"/ Licencias "+AllTrim(Str(Int(AppData:nLicence)))+CRLF+CRLF,"")+;
"Total de usuarios activos: <b>"+AllString(Len(aUsuarios))+"</b>"+CRLF+CRLF+;
cUserList+CRLF+CRLF+"Pulse y mantenga <b>[Esc]</b> para salir.",;
"Usuarios activos de la BBDD "+IF(!Appdata:lMultiSqlDb,Allstring(Appdata:cSqlDbName),Left(Allstring(Appdata:cSqlDbName),Len(Allstring(Appdata:cSqlDbName))-4)+"%"))
lExit:=lAnd( GetAsyncKeyState( 27 ), 0xFFF0 )
Else
Exit
Endif
Enddo

Endif

Return aUsuarios
Avatar de Usuario
bingen
Mensajes: 565
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: control de usuarios

Mensaje por bingen »

NOTA: Solo te servirá si haces como nosotros que abrimos una conexión contra la BBDD nada más entrar en la aplicación y la cerramos al final.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Responder