Access - Comparar campos mediante funcion

 
Vista:
sin imagen de perfil

Comparar campos mediante funcion

Publicado por Pepe (1 intervención) el 16/04/2018 19:06:44
Buenos días.

Tengo una BD donde cada usuario que ingresa se le asigna una TempVars "IdUsuarioActual".

Esta BD consta de tareas. Cada vez que un usuario crea una tarea, el campo "Propietario" toma el valor de la variable temporal "IdUsuarioActual".

Entonces, para cada tarea, quisiera que algunos campos sólo los pueda modificar en el formulario el "Propietario", para lo que quiero comparar los dos valores: el campo "Propietario", con la variable temporal "IdUsuarioTemporal". Para ello, en cada txt que quiera "restringir", quiero colocar un If del tipo

1
2
3
4
5
If TempVars!IdUsuarioActual <> Propietario Then
        MsgBox "No tiene permisos para modificar este elemento", vbExclamation, ""
Else
       ' Lo que sea para continuar con el cambio.
End If

Si escribo este código en el txt no tengo problema, pero si declaro una función no consigo que funcione por algún motivo que se escapa de mis limitados conocimientos:

1
2
3
4
5
6
7
8
9
10
11
12
13
Public Function PermisosEdicion()
On Error GoTo PermisosEdicion_Err
If TempVars!IdUsuarioActual <> Propietario Then
     MsgBox "No tiene permisos para modificar este elemento", vbExclamation, ""
Else
     MsgBox "OK", vbExclamation, ""
End If
PermisosEdicion_Exit:
    Exit Function
PermisosEdicion_Err:
    MsgBox Error$
    Resume PermisosEdicion_Exit
End Function

Gracias por vuestros comentarios.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Comparar campos mediante funcion

Publicado por Anonimo (3312 intervenciones) el 17/04/2018 08:37:19
Tal vez el aplicar otra metodología simplificase el proceso.

La aplicación de permisos se aplica en un (supuesto) formulario y ya en ese formulario se conoce al usuario actual y al usuario-propietario.

Dependiendo de la aplicación en si (la necesidad de diferenciar permisos registro a registro o no) se utilizaría el evento Open del formulario o el Current

En ese evento se le asignarían los permisos a cada campo a bloquear de una forma tan sencilla como:
1
2
Me.[nombre-del-campo].Enabled = Usuario = Propietario
Me.[nombre-del-campo].Locked = Usuario <> Propietario
(NOTA: el objeto a bloquear NO PUEDE ser el objeto activo)

Al respecto de la función .... si se crea dentro del formulario las referencias a los objetos podrán ser relativas, si la función se crea fuera del formulario las referencias (en concreto 'propietario') deberán ser absolutas y se podría aplicar la opción de pasar ese valor como parámetro en la función

Por ejemplo asi:
1
2
3
4
Public Function PermisosEdicion(UnUsuario As String) As Boolean
If TempVars!IdUsuarioActual = UnUsuario Then PermisosEdicion = True : Exit Function
MsgBox "No tiene permisos para modificar este elemento", vbExclamation, ""
End FUnction
Se la utilizaría asi:

1
PermisosEdicion( aquí -el propietario)
Que devolvería un TRUE / FALSE y seria valido para 'hacer algo' mas que mandar un mensaje (que se volverá repetido y aburrido a partir de la tercera vez)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar