Buenas noches
Hay alguna forma de controlar el numero de usuarios a entrar en un sistema
por su ayuda mil gracias
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.
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
Re: control de usuarios
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.
Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
Re: control de usuarios
Gracias por responder uso mariadbbingen 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.
Re: control de usuarios
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
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
http://www.bisoft.es
Re: control de usuarios
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
Re: control de usuarios
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
http://www.bisoft.es