Aplicar Pass a un botón eliminar registro para impedir borrado por accidente

Resulta que he implementado un código a mi programa para dar roles a los usuarios. Que mediante un botón le doy clic para que me abra el formulario donde están los SI/NO para permitir dar roles a dicho usuario.

Ese botón lo tengo con otro formulario llamado Autorizar, cuando le doy tengo que poner la contraseña de administrador para que me abra el de los roles y va perfecto.

Ahora lo quiero es aplicar esa misma función a un Botón Eliminar. Que cuando le den a eliminar me salte ese formulario para poner la contraseña del admin y que borre el registro.

Este es el código que tengo en el botón de eliminar. Y me funciona sin intentar que me abra lo del Form Autorizar

Private Sub Comando6_Click()
On Error GoTo Err_Eliminar_Click
Dim msjel As String
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70
Exit_Eliminar_Click:
Exit Sub
Err_Eliminar_Click:
msjel = MsgBox("El registro no sera Eliminado.", vbInformation, "Alerta")
Resume Exit_Eliminar_Click
End Sub

Este es parte del codigo que me permite halar la funcion para que me de acceso a Autorizar al boton de Roles. 

Private Sub RolUsuarios_Click()
vForm = "Permisos"
DoCmd.OpenForm "Autorizar"
End Sub
´//////////////////////////////////////////
Option Compare Database
Option Explicit
Public vForm As String
Public UserLevel As Integer
Public LogedUser As String
Public Sub ContraseñaPermisos()
If vForm = "Permisos" Then
    UserLevel = (IsNull(DLookup("[Admin]", "Usuarios", "[Admin] =  0 " _
                & " AND [Contraseña] = '" & Form_Autorizar.Contraseña & "'")))
End If
End Sub

lo que quiero es aplicar lo mismo al  botón eliminar pero que cuando lo haga me borre el registro y no lo esta haciendo. 

1 respuesta

Respuesta
2

Esos códigos, sacados de su contexto global, no me dicen nada... pero, una forma sencilla sería hacerlo así:

Private Sub cmdEliminar_Click()
Const elPassBueno as String="#1234*"
Dim laContraseña as Variant
laContraseña=InputBox ("Escribe la contraseña para poder eliminar el registro","Acceso restringido")
If StrPtr(laContraseña)=0 Then Exit Sub 'Si se pulsa "Cancelar" en el inputbox
If Nz(laContraseña,"")="" Then Exit Sub 'Si se deja en blanco
If laContraseña=elPassBueno Then 
    DoCmd.RunCommand acCmdDeleteRecord 'Si la contraseña coincide, borras el registro activo
Else
    Msgbox "La contraseña no es válida, no puedes eliminar el registro"
End If
End Sub

Si tienes una tabla de permisos, y uno es permitir borrar registros, puedes usar DLookup para comprobar si el usuario tiene ese permiso y permitir borrar o no, algo en esta línea:

If DLookup("Borrar","TPermisos","Usuario=" & elUsuario) Then
   DoCmd.RunCommand acCmdDeleteRecord
Else
   Msgbox "No tienes permisos para borrar registros"
End If

Un saludo.


Saludos gracias por ayuda. Aplico el código y funciona bien pero. 

1. El acCmdDeleteRecord se detiene, da un error cuando se le dice cancelar. 

2. Lo que quiero es aplicar la contraseña con el Userlevel. Que me pida la misma contraseña que ya tiene un usuario registrado. Y claro que solo me funcione la que tiene uno como administrador. 

1./ El código lo he probado, tal cual está, y no da ningún error al pulsar el "Cancelar" del inputbox.

La instrucción RunCmd. RunCommand acCmdDeleteRecord no pide confirmación para eliminar, por lo que no le puedes dar a Cancelar en ella... No sé a qué te refieres...

2./ Si la contraseña ya la tienes registrada en una tabla, usa DLookup para recuperarla y compararla con la que pides en el inputbox, es decir, eliminas lo de Const elPassBueno... y en el If pones:

If laContraseña=DLookup(....) Then 

Y en el dlookup pones el capo que tiene la contraseña, la tabla donde está, y cómo filtras el usuario, parecido (si no igual) a lo que tienes en el sub ContraseñaPermisos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas