Codice ripetuto evitare

di il
7 risposte

Codice ripetuto evitare

L'utente entra dopo aver fatto il login e da li riesco ha recuperare il tipo di utente.

Per ogni maschera se l'utente è di tipo utente impedisco la scrittura e altre varie cose.
Come è possibile inserire il codice sotto in un modulo per non doverlo riscrivere ogni volta.
Private Sub Form_open(Cancel As Integer)
On Error GoTo Err_elenco
Dim tipo As String
tipo = cerca
    Select Case tipo
    Case Is = "utente"
        With Me
            .AllowDeletions = False
            .AllowAdditions = False
            .AllowEdits = False
            .ShortcutMenu = False
        End With
    End Select
Exit_elenco:
    Exit Sub

7 Risposte

  • Re: Codice ripetuto evitare

    ""concettualmente"", nel senso che non e' specifico di Access, ma di qualunque implementazione

    1) quando un utente si ""autentica"" ed ha l'accesso, devi creare una ""sessione"".
    Che cosa e' una ""sessione"" dipende dalle tue scelte e dal support fornito framework/software (in questo caso Access)

    2) nella ""sessione"" memorizzi tutte le informazioni che ti servono legate a quell'utente. Tali informazioni rimarrano a disposizione in modo ""globale"" fino a che l'utente non ""esce""

    Ora il problema e' questo:

    SE l'utente fa la login DUE volte da due computer diversi, come risolvi?
    Le soluizioni sono:

    1) ogni login e' una sessione diversa
    2) il sistema si lamenta del fatto che esiste gia' una sessione attiva.

    Nel caso 2) il modo corretto di procedere corretto e' chiudere la sessione precedente ed attivare la nuova.

    Il motivo e' ""filosofico"": se per qualche motivo la sessione precedentemente e' rimasta aperta perche' il computer e' ""schiattato"", non avresti piu' modo di chiuderla.

    Questa la teoria.
    Per la pratica, non sono esperto di Access
  • Re: Codice ripetuto evitare

    Un approccio potrebbe essere quello di creare una Sub che accetti come parametri il tipo e la Userform
    Public Sub SetPermission(uf As UserForm, tipo As String)
    On Error GoTo Err_elenco
    Dim tipo As String
        Select Case tipo
        Case Is = "utente"
            With uf
                .AllowDeletions = False
                .AllowAdditions = False
                .AllowEdits = False
                .ShortcutMenu = False
            End With
        End Select
    Exit_elenco:
        Exit Sub
    End Sub
    E poi la richiami nella Open
    Private Sub Form_open(Cancel As Integer)
    SetPermission(Me, cerca)
    End Sub
    ma manca dei suggerimenti di Migliorabile.
    L'idea di "sessione" potresti implementarla dedicando una tabella ai permessi relativi agli utenti.
  • Re: Codice ripetuto evitare

    Ho provato il codice suggeritomi da Sgrunak, ma ricevo tale errore:
    Errore di compilazione; Previsto:=
  • Re: Codice ripetuto evitare

    Magari se dici anche dove hai l'errore è meglio
  • Re: Codice ripetuto evitare

    Dimenticavo la fregatura delle parentesi. Toglile nell'evento open
    Private Sub Form_open(Cancel As Integer)
    SetPermission Me, cerca 
    End Sub
  • Re: Codice ripetuto evitare

    Sgrubak ha scritto:


    Dimenticavo la fregatura delle parentesi. Toglile nell'evento open
    Private Sub Form_open(Cancel As Integer)
    SetPermission Me, cerca 
    End Sub
    GRAZIE
  • Re: Codice ripetuto evitare

    Propongo una ulteriore semplificazione e correggo qualche anomalia come la definizione di UserForm che in access non c'è e la dichiarazione della Variabile [Tipo] già passata come parametro:
    Public Function SetPermission(tipo As String)
    On Error GoTo Err_elenco
        Dim uf As Access.Form
        Set uf = CodeContextObject
        Select Case tipo
        Case Is = "utente"
            With uf
                .AllowDeletions = False
                .AllowAdditions = False
                .AllowEdits = False
                .ShortcutMenu = False
            End With
        End Select
    Exit_elenco:
        Exit Sub
    End Sub
    Solitamente non si ha una Stringa per definire il LIVELLO UTENTE ma un Indice di persmissivo dove ZERO=SOLA LETTURA ed a salire i livelli più penetranti, quindi io non userei [TIPO AS STRINGA] come definizione di PERMISSIVO.

    Detto questo, come suggeriva Migliorabile, sarebbe meglio ragionare con una gestione di "Variabili Ambiente" da popolare al LOGIN, prima azione da fare all'avvio, che carica tutta una serie di impostazioni personali tra cui i vari Permissivi.

    Se la gestione Utenti fosse più articolata serve una struttura di Tabelle per definire il tutto.
    Ragionando quindi in ottica più strutturata, non è necessario che la maschera passi un parametro alla Funzione, in quanto la definizione delle variabili AMBIENTE, consentirebbe alla funzione di recuperare il LIVELLO da quelle definite come GLOBAL e la funzione sarebbe così:
    
    [code]Public Function SetPermission()
    On Error GoTo Err_elenco
        Dim uf As Access.Form
        Set uf = CodeContextObject
        Select Case LevelPermission
            Case 0
                uf.AllowDeletions = False
                uf.AllowAdditions = False
                uf.AllowEdits = False
                uf.ShortcutMenu = False
            Case 1
                uf.AllowDeletions = False
                uf.AllowAdditions = False
                uf.AllowEdits = True
                uf.ShortcutMenu = False
             Case ...
        End Select
    Exit_elenco:
        Exit Sub
    End Sub
    In questo caso basta mettere nell'Evento LOAD senza attivare EVENT PROCEDURE:
    =SetPermission()
    Questo, nel caso la Form non abbia codice aggiuntivi evita sia attivata la proprietà HasModule inutilmente.

    Io feci qualche tempo fa un DEMO che puoi trovare pubblicato quì:
    http://www.accessgroup.it/general/log-di-eventi.htm

    Si tratta di una cosa un poco più articolata e complessa, ma magari rende l'idea di come si può gestire a livello di Client la definizione delle personalizzazioni... in questo caso è un EVENT TRACER dedicato per il DEBUG dei Client, ma la filosofia è applicabile alla gestione Utenti e varie Customizzazioni.
Devi accedere o registrarti per scrivere nel forum
7 risposte