miércoles, 5 de diciembre de 2018
martes, 4 de diciembre de 2018
lunes, 3 de diciembre de 2018
domingo, 2 de diciembre de 2018
sábado, 1 de diciembre de 2018
jueves, 1 de noviembre de 2018
ACCESS II: Código del Formulario Login
Option Compare Database
Option Explicit
' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
'Procedure: Comprueba_Intentos
' Purpose : Comprueba los intentos de inicio de sesión fallidos y actúa
' en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
intUsuario As Integer)
If bytErrLogin = Get_ErrMaxLogin Then
' Mostramos el mensaje "Se ha superado el número máximo de intentos
' de inicio de sesión"
MsgBox "Se ha superado el número máximo de intentos de " & _
"inicio de sesión." & _
vbCrLf & vbCrLf & _
"Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
vbCrLf & vbCrLf & _
"El usuario ha sido bloqueado.", _
vbExclamation, "Inicio de sesión"
' Bloqueamos al usuario
Call Block_Usuario(intUsuario)
' Hacemos log del bloqueo del usuario
Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
With Me
' Actualizamos el combobox cbo_Usuario
.cbo_Usuario.Requery
' Borramos la contraseña
.txt_Contraseña = ""
' Ocultamos la etiqueta
.lbl_Mensaje.Visible = False
End With
End If
End Sub
Private Sub cmd_Login_Click()
Dim intUsuario As Integer
Dim strContraseña As String
intUsuario = Nz(Me.cbo_Usuario.Value, 0)
' Ocultamos la etiqueta
If Me.lbl_Mensaje.Visible = True Then Me.lbl_Mensaje.Visible = False
' Comprobamos si se ha seleccionado usuario
' Comprobamos si se ha introducido contraseña
' Comprobamos el valor introducido para el usuario y su contraseña
' -------------------------------------------------------
' Aquí podemos insertar el código que queremos que se
' ejecute cuando iniciemos la sesión...
' -------------------------------------------------------
' Mostramos mensaje
MsgBox "Sesión de usuario iniciada", _
vbInformation, _
"Inicio de Sesión"
' Hacemos log del inicio de sesión
Log_Sesion intUsuario, "Inicio de sesión."
' Cerramos el formulario
DoCmd.Close acForm, Me.Name
' Añadimos +1 a los intentos de login erróneos
1
' Centramos el foco en el textbox
' Mostramos mensaje en la etiqueta
Call MensajeEtiqueta("La contraseña introducida es errónea.")
' Hacemos log del inicio de sesión fallido
Call Log_Sesion(intUsuario, "Inicio de sesión erróneo.", strContraseña)
' Comprobamos los intentos de inicio de sesión
End Sub
Private Sub MensajeEtiqueta(strMensaje As String)
Dim lbl As Label
Set lbl = Me.lbl_Mensaje
If Nz(strMensaje, "") <> "" Then
' Mostramos mensaje
With lbl
' Hacemos visible la etiqueta
.Visible = True
' Mostramos el Mensaje de aviso
.Caption = strMensaje
End With
End If
' Borramos el objeto
Set lbl = Nothing
End Sub
Private Sub Cmd_Salir_Click()
' Cerramos el Formulario
DoCmd.Close acForm, Me.Name
End Sub
Private Sub Form_Load()
' Establecemos el valor de la variable que controla los
' errores de login...
bytErrLogin = 0
End Sub
Option Explicit
' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
'Procedure: Comprueba_Intentos
' Purpose : Comprueba los intentos de inicio de sesión fallidos y actúa
' en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
intUsuario As Integer)
If bytErrLogin = Get_ErrMaxLogin Then
' Mostramos el mensaje "Se ha superado el número máximo de intentos
' de inicio de sesión"
MsgBox "Se ha superado el número máximo de intentos de " & _
"inicio de sesión." & _
vbCrLf & vbCrLf & _
"Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
vbCrLf & vbCrLf & _
"El usuario ha sido bloqueado.", _
vbExclamation, "Inicio de sesión"
' Bloqueamos al usuario
Call Block_Usuario(intUsuario)
' Hacemos log del bloqueo del usuario
Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
With Me
' Actualizamos el combobox cbo_Usuario
.cbo_Usuario.Requery
' Borramos la contraseña
.txt_Contraseña = ""
' Ocultamos la etiqueta
.lbl_Mensaje.Visible = False
End With
End If
End Sub
Private Sub cmd_Login_Click()
Dim intUsuario As Integer
Dim strContraseña As String
intUsuario = Nz(Me.cbo_Usuario.Value, 0)
' Ocultamos la etiqueta
If Me.lbl_Mensaje.Visible = True Then Me.lbl_Mensaje.Visible = False
' Comprobamos si se ha seleccionado usuario
' Comprobamos si se ha introducido contraseña
' Comprobamos el valor introducido para el usuario y su contraseña
' -------------------------------------------------------
' Aquí podemos insertar el código que queremos que se
' ejecute cuando iniciemos la sesión...
' -------------------------------------------------------
' Mostramos mensaje
MsgBox "Sesión de usuario iniciada", _
vbInformation, _
"Inicio de Sesión"
' Hacemos log del inicio de sesión
Log_Sesion intUsuario, "Inicio de sesión."
' Cerramos el formulario
DoCmd.Close acForm, Me.Name
' Añadimos +1 a los intentos de login erróneos
1
' Centramos el foco en el textbox
' Mostramos mensaje en la etiqueta
Call MensajeEtiqueta("La contraseña introducida es errónea.")
' Hacemos log del inicio de sesión fallido
Call Log_Sesion(intUsuario, "Inicio de sesión erróneo.", strContraseña)
' Comprobamos los intentos de inicio de sesión
End Sub
Private Sub MensajeEtiqueta(strMensaje As String)
Dim lbl As Label
Set lbl = Me.lbl_Mensaje
If Nz(strMensaje, "") <> "" Then
' Mostramos mensaje
With lbl
' Hacemos visible la etiqueta
.Visible = True
' Mostramos el Mensaje de aviso
.Caption = strMensaje
End With
End If
' Borramos el objeto
Set lbl = Nothing
End Sub
Private Sub Cmd_Salir_Click()
' Cerramos el Formulario
DoCmd.Close acForm, Me.Name
End Sub
Private Sub Form_Load()
' Establecemos el valor de la variable que controla los
' errores de login...
bytErrLogin = 0
End Sub
ACCESS II: Práctica III SQL
REALIZA LA SIGUIENTE PRÁCTICA EN CONSULTA SQL.
a) Las instrucciones estan en texto negritas, el código está en texto color rojo.
b) En Una B.D Nueva realiza las siguientes sentencias en código SQL, si tienes dudas, consulta la parte teórica de Access Avanzado, si persisten las molestias de no comprensión, sigue leyendo, hasta entender. YO QUIERO, YO PUEDO, Y SE QUE LO LOGRARÉ.
a) Las instrucciones estan en texto negritas, el código está en texto color rojo.
b) En Una B.D Nueva realiza las siguientes sentencias en código SQL, si tienes dudas, consulta la parte teórica de Access Avanzado, si persisten las molestias de no comprensión, sigue leyendo, hasta entender. YO QUIERO, YO PUEDO, Y SE QUE LO LOGRARÉ.
1. Ejercicios
SQL en Access
2. SQL -
Structured Query Language P á g i n a | 2 EJERCICIOS SQL Crear en Access la
base de datos Empresa_1 y ejecutar las sentencias
SQL EMPLEADOS ID_EMPLEADO NOMBRE APELLIDOS F_NACIMIENTO
SEXO CARGO SALARIO
1 Carlos Jiménez Clarín 1985/05/03 H Mozo 1500 2 Elena
Rubio Cuestas 1978/09/25 M Secretaria 1300 3 José Calvo Sisman 1990/11/12 H
Mozo 1400 4 Margarita Rodríguez Garcés 1992/05/16 M Secretaria 1325 SCRIPT:
CREACIÓN TABLAS CREATE TABLE EMPLEADOS(id_empleado
int primary Key NOT NULL, nombre char(50) NOT NULL, apellidos char(50) NOT
NULL, f_nacimiento date NOT NULL, sexo char(1) NOT NULL, cargo char(50) NOT
NULL, salario int NOT NULL );
INSERCION DE DATOS TABLA EMPLEADO INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos,
f_nacimiento, sexo, cargo, salario) VALUES ('1','Carlos','Jiménez
Clarín','1985/05/03','H','Mozo','1500');
INSERT INTO EMPLEADOS (id_empleado, nombre,
apellidos, f_nacimiento, sexo, cargo, salario) VALUES ('2','Elena','Rubio
Cuestas','1978/09/25','M','Secretaria','1300');
INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos,
f_nacimiento, sexo, cargo, salario) VALUES ('3','José','Calvo
Sisman','1990/11/12','H','Mozo','1400');
INSERT INTO EMPLEADOS (id_empleado, nombre,
apellidos, f_nacimiento, sexo, cargo, salario) VALUES
('4','Margarita','Rodríguez Garcés','1992/05/16','M','Secretaria','1325');
Ejemplo 1 ¿Qué empleados tienen un salario mayor a
1350? select NOMBRE , APELLIDOS from EMPLEADOS
where SALARIO > 1350
Ejemplo 2 ¿Realizar una consulta que devuelva el nombre,
apellidos y la fecha de nacimiento de aquellos empleados que cobren más de
1350?
select NOMBRE , APELLIDOS ,
F_NACIMIENTO from EMPLEADOS where SALARIO > 1350
Ejemplo 3 ¿Qué empleados tienen un sueldo comprendido
entre 1350 y 1450?
select NOMBRE , APELLIDOS from
EMPLEADOS where SALARIO > 1350 and SALARIO <= 1450
3. SQL - Structured Query Language P á g i n a | 3
Ejemplo 4 ¿Qué empleados son hombres? select NOMBRE , APELLIDOS from EMPLEADOS where SEXO = 'H'
Ejemplo 5 ¿Cuáles son los nombres de los empleados
tienen el cargo de MOZO? select NOMBRE from
EMPLEADOS where CARGO = 'MOZO'
Ejemplo 6 ¿Cuál es el empleado de código 4? select APELLIDOS from EMPLEADOS where ID_EMPLEADO = 4
4. SQL -
Structured Query Language P á g i n a | 4 Crear en Access la siguiente bases de
Datos y Ejecutar las sentencias SQL DEPARTAMENTO cod_dep nombre_dep
localización 10 Desarrollo de Software El Coyolar 20 Análisis de Sistemas
Guadalupe 30 Contabilidad Subtiava 40 Ventas San Felipe EMPLEADO cod_emp nombre
edad oficio dir fecha_ing salario comisión cod_dep 1 Vargas Héctor 27 Vendedor
León 12/05/1993 12000 40 2 Hernández Julio 27 Analista Chinandega 14/07/1982
13000 1500 20 3 Esquivel José 31 Director Juigalpa 05/06/1981 16700 1200 30 4
Delgado Carmen 37 Vendedor León 02/03/1983 13400 40 5 Castillo Luis 17 Vendedor
Masaya 12/08/1982 16309 1000 40 6 Esquivel Alfonso 26 Presidente Nagarote
12/09/1981 15000 30 7 Pérez Luis 32 Empleado Managua 02/03/1980 16890 10
SCRIPT:
CREACIÓN TABLAS
CREATE TABLE DEPARTAMENTO( cod_dep
int primary Key NOT NULL, nombre_dep char(50) NOT NULL, localización char (50)
NOT NULL );
CREATE TABLE EMPLEADO( cod_emp int
primary Key NOT NULL, nombre char(50) NOT NULL, edad int NOT NULL, oficio
char(50) NOT NULL, dir char(50) NOT NULL, fecha_ing char(50) NOT NULL, salario
int NOT NULL, comisión int, cod_dep int NOT NULL );
INSERCION DE DATOS TABLA DEPARTAMENTO
INSERT INTO DEPARTAMENTO (cod_dep,
nombre_dep, localización) VALUES ('10','Desarrollo de Software','El Coyolar');
INSERT INTO DEPARTAMENTO (cod_dep,
nombre_dep, localización) VALUES ('20','Análisis de Sistemas','Guadalupe');
INSERT INTO DEPARTAMENTO (cod_dep,
nombre_dep, localización) VALUES ('30','Contabilidad','Subtiava');
INSERT INTO DEPARTAMENTO (cod_dep,
nombre_dep, localización) VALUES ('40','Ventas','San Felipe');
INSERCION DE DATOS TABLA EMPLEADO
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('1','Vargas Héctor','27','Vendedor','León','12/05/1993','12000',null,'40');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('2','Hernández Julio','27',' Analista','
Chinandega','14/07/1982','13000','1500','20');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('3','Esquivel
José','31','Director','Juigalpa','05/06/1981','16700','1200','30');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('4','Delgado Carmen','37','Vendedor','León','02/03/1983','13400',null,'40');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('5','Castillo
Luis','17','Vendedor','Masaya','12/08/1982','16309','1000','40');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('6','Esquivel
Alfonso','26','Presidente','Naragote','12/09/1981','15000',null,'30');
INSERT INTO EMPLEADO (cod_emp,
nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES
('7','Pérez Luis','32','Empleado','Managua','02/03/1980','16890',null,'10');
5. SQL -
Structured Query Language P á g i n a | 5
Ejemplo 7 Listar los nombres de los empleados cuyo
nombre termine con la letra ‘o’. select nombre from
EMPLEADO where nombre like '*o'
Ejemplo 8 Seleccionar el nombre, el oficio y salario de
los empleados que trabajan en León. select nombre,
oficio, salario from EMPLEADO where dir='León'
Ejemplo 9 Calcular el salario medio de todos los
empleados. select avg(salario) from EMPLEADO
Ejemplo 10 ¿Cuál es el máximo salario de los empleados
del departamento número 10? select max(salario)
from EMPLEADO where cod_dep = 10
Ejemplo 11 ¿Cuántos empleados hay en el departamento
número 10? select count(*) from EMPLEADO where
cod_dep = 10
Ejemplo 12 ¿Cuántos empleados hay en el departamento de
VENTAS? select count(*) from EMPLEADO where
cod_dep=40
Ejemplo 13 ¿Cuántos empleados no tienen comisión? select count(*) from EMPLEADO where comisión is null
Ejemplo 14 Se desea saber cuántos nombres de los
empleados empiezan por la letra ‘A’. select
count(*) from EMPLEADO where nombre like 'E*'
Ejemplo 15 Para cada oficio obtener la suma de
salarios. select oficio, sum(salario) from EMPLEADO
group by oficio
6. SQL -
Structured Query Language P á g i n a | 6
Ejemplo 16 Mostrar los datos de los empleados cuyo
salario sea mayor que la media de todos los salarios. select * from EMPLEADO where salario>(select avg(salario)
from EMPLEADO)
Ejemplo 17 Seleccionar el nombre del empleado que tiene
máximo salario. select nombre from EMPLEADO where
salario=(select max(salario)from EMPLEADO)
Ejemplo 18 Mostrar el nombre del empleado que tiene el
salario más bajo. select nombre from EMPLEADO where
salario=(select min(salario)from EMPLEADO)
Ejemplo 19 Insertar en la tabla EMPLEADO un empleado
con código 8, nombre ‘Cajas Carlos’ de 32 años, oficio Analista, vive en
Matagalpa, fecha de ingreso en la empresa el 22-06-2001, su salario es de 15600,
no tiene comisión y pertenece al departamento 20.
INSERT INTO EMPLEADO (cod_emp, nombre, edad,
oficio, dir, fecha_ing, salario, comisión,
cod_dep) VALUES ('8','Cajas
Carlos','32','Empleado','Matagalpa','22/06/2001','15600',null,'20');
Ejemplo 20 Insertar en la tabla DEPARTAMENTO un
departamento cuyo número sea 50, de nombre ‘GENERAL’ y cuya localización sea
‘Laborio’.
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep,
localización) VALUES ('50','General','Laborio');
Ejemplo 21 Insertar en la tabla DEPARTAMENTO un
departamento cuyo número sea 60 y de nombre ‘PRUEBAS’ y cuya localización sea
‘Puerto Cayo’.
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep,
localización) VALUES ('60','Pruebas','Puerto Cayo');
Ejemplo 22 Doblar el salario a todos los empleados del
departamento 30. update EMPLEADO set salario =
salario*2 where cod_dep=30
Ejemplo 23 Cambiar todos los empleados del departamento
número 30 al departamento número 20. update
EMPLEADO set cod_dep = 20 where cod_dep = 30
Ejemplo 24 Incrementar en un 10% el sueldo de los
empleados del departamento 10. update EMPLEADO set
salario=salario*1.1 where cod_dep=10
7. SQL -
Structured Query Language P á g i n a | 7
Ejemplo 25 Cambiar la localidad del departamento número
10 a ‘Zaragoza’. update EMPLEADO set
localizacion='Zaragoza' where cod_dep = 10
Ejemplo 26 En la tabla DEPARTAMENTO borrar el
departamento número 40. delete from DEPARTAMENTO
where cod_dep = 40
Ejemplo 27 En la tabla EMPELADO borrar todos los
empleados que sean del departamento 20. delete from
EMPLEADO where cod_dep = 20
ACCESS II: Código del Módulo bas_sesion
Option Compare Database
'---------------------------------------------------------------------
' Procedure : Log_Sesion
' Author : Witigo (Angel Campos Muñoz)
' Date : 22/09/2014
' Purpose : Inserta un registro en la tabla dbo_logs_sesion con los
' datos de la sesión de usuario
'---------------------------------------------------------------------
'
Public Function Log_Sesion(intUsuario As Integer, _
strResultado As String, _
Optional strContraseña As String = "")
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("dbo_logs_sesion")
With rst
' Agregamos un registro
.AddNew
' Especificamos los campos en los que vamos a insertar
' los datos relativos a la sesión de usuario.
.Fields("Fecha").Value = Now()
.Fields("Terminal").Value = Environ("Computername")
.Fields("ID_Usuario").Value = intUsuario
.Fields("Resultado").Value = strResultado
.Fields("ContraseñaErronea").Value = strContraseña
' Actualizamos el registro
.Update
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Function
'---------------------------------------------------------------------
' Procedure : Log_Sesion
' Author : Witigo (Angel Campos Muñoz)
' Date : 22/09/2014
' Purpose : Inserta un registro en la tabla dbo_logs_sesion con los
' datos de la sesión de usuario
'---------------------------------------------------------------------
'
Public Function Log_Sesion(intUsuario As Integer, _
strResultado As String, _
Optional strContraseña As String = "")
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("dbo_logs_sesion")
With rst
' Agregamos un registro
.AddNew
' Especificamos los campos en los que vamos a insertar
' los datos relativos a la sesión de usuario.
.Fields("Fecha").Value = Now()
.Fields("Terminal").Value = Environ("Computername")
.Fields("ID_Usuario").Value = intUsuario
.Fields("Resultado").Value = strResultado
.Fields("ContraseñaErronea").Value = strContraseña
' Actualizamos el registro
.Update
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Function
ACCESS II: Código del Módulo bas_seguridad_sesion
Option Compare Database
Option Explicit
' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
Public Sub Block_Usuario(intUsuario As Integer)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT dbo_Usuarios.Activo " & _
"FROM dbo_Usuarios " & _
"WHERE ID_Usuario = " & intUsuario & ";"
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
With rst
' Modificamos el registro
.Edit
.Fields("Activo").Value = False
' Actualizamos el registro
.Update
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Sub
'Purpose : Devuelve el número máximo de intentos fallidos de iniciar
' sesión en la aplicación.
'-------------------------------------------------------------------------
'
Public Function Get_ErrMaxLogin() As Byte
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT dbo_Opciones.ID_Opcion, " & _
"dbo_Opciones.ErrMaxLogin " & _
"FROM dbo_Opciones " & _
"WHERE (((dbo_Opciones.ID_Opcion) = 1));"
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
With rst
' Devolvemos 0 por que no hay registros
If .RecordCount = 0 Then Get_ErrMaxLogin = 0
' Devolvemos el número máximo de intentos
Get_ErrMaxLogin = !ErrMaxLogin
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Function
'Procedure: Comprueba_Intentos
' Purpose : Comprueba los intentos de inicio de sesión fallidos y actúa
' en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
intUsuario As Integer)
If bytErrLogin = Get_ErrMaxLogin Then
' Mostramos el mensaje "Se ha superado el número máximo de intentos
' de inicio de sesión"
MsgBox "Se ha superado el número máximo de intentos de " & _
"inicio de sesión." & _
vbCrLf & vbCrLf & _
"Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
vbCrLf & vbCrLf & _
"El usuario ha sido bloqueado.", _
vbExclamation, "Inicio de sesión"
' Bloqueamos al usuario
Call Block_Usuario(intUsuario)
' Hacemos log del bloqueo del usuario
Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
With Me
' Actualizamos el combobox cbo_Usuario
.cbo_Usuario.Requery
' Borramos la contraseña
.txt_Contraseña = ""
' Ocultamos la etiqueta
.lbl_Mensaje.Visible = False
End With
End If
End Sub
Option Explicit
' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
Public Sub Block_Usuario(intUsuario As Integer)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT dbo_Usuarios.Activo " & _
"FROM dbo_Usuarios " & _
"WHERE ID_Usuario = " & intUsuario & ";"
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
With rst
' Modificamos el registro
.Edit
.Fields("Activo").Value = False
' Actualizamos el registro
.Update
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Sub
'Purpose : Devuelve el número máximo de intentos fallidos de iniciar
' sesión en la aplicación.
'-------------------------------------------------------------------------
'
Public Function Get_ErrMaxLogin() As Byte
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT dbo_Opciones.ID_Opcion, " & _
"dbo_Opciones.ErrMaxLogin " & _
"FROM dbo_Opciones " & _
"WHERE (((dbo_Opciones.ID_Opcion) = 1));"
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
With rst
' Devolvemos 0 por que no hay registros
If .RecordCount = 0 Then Get_ErrMaxLogin = 0
' Devolvemos el número máximo de intentos
Get_ErrMaxLogin = !ErrMaxLogin
End With
' Cerramos el recordset
rst.Close
' Borramos los objetos
Set rst = Nothing
Set dbs = Nothing
End Function
'Procedure: Comprueba_Intentos
' Purpose : Comprueba los intentos de inicio de sesión fallidos y actúa
' en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
intUsuario As Integer)
If bytErrLogin = Get_ErrMaxLogin Then
' Mostramos el mensaje "Se ha superado el número máximo de intentos
' de inicio de sesión"
MsgBox "Se ha superado el número máximo de intentos de " & _
"inicio de sesión." & _
vbCrLf & vbCrLf & _
"Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
vbCrLf & vbCrLf & _
"El usuario ha sido bloqueado.", _
vbExclamation, "Inicio de sesión"
' Bloqueamos al usuario
Call Block_Usuario(intUsuario)
' Hacemos log del bloqueo del usuario
Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
With Me
' Actualizamos el combobox cbo_Usuario
.cbo_Usuario.Requery
' Borramos la contraseña
.txt_Contraseña = ""
' Ocultamos la etiqueta
.lbl_Mensaje.Visible = False
End With
End If
End Sub
Suscribirse a:
Entradas (Atom)

































