Problema ad impostare un IF con condizione OR

di il
3 risposte

Problema ad impostare un IF con condizione OR

Ciao a tutti.

Sicuramente è una stupidaggine, ma non la riesco a vedere

Per evitare che qualcuno entri in un mio DB (che fino ad oggi utilizzavo solo io) avevo fatto una cosa del genere (basata su una tabella tblOperatori che contiene i dati di tutti noi più alcuni campi SI/NO)

If DLookup("Amministratore", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0)) = False) Then
   MsgBox ("L'utente selezionato non è autorizzato all'accesso")
   Exit Sub
End If

Cioè, molto banalmente, quando viene selezionato da una combo uno degli operatori, siccome io sono l'unico con il valore Amministratore flaggato, se non sono io non consente di andare avanti.

Adesso ho dovuto aggiungere la possibilità di un secondo accesso, e quindi in quella tabella ho inserito un nuovo campo SI/NO, flaggato per l'altra persona che può accedere (ma solo in consultazione, in quanto soprattutto le funzioni di inserimento dati sono interdette se non è flaggato il campo Amministratore); di conseguenza ho modificato le righe di sopra in:

If (DLookup("Amministratore", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0)) = False) Or (DLookup("RespQualita", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0)) = False) Then
    MsgBox ("L'utente selezionato non è autorizzato all'accesso")
    Exit Sub
End If

Io la interpetro con: "se Amministratore non è flaggato O RespQualita non è flaggato allora fai questo"

Quindi, se almeno una delle 2 condizioni è vera dovrebbe uscire dall'IF e andare avanti, invece adesso non fa entrare nè me nè l'altro

Se usassi un AND invece di OR significa che entrambe le considizioni devono essere valide, ma i 2 soggetti non possono avere entrambe le condizioni vere

Sicuramente, come detto, è una stupidaggine che non riesco a vedere, ma per ora in LOOP ci sono io...

Grazie

Andrea

3 Risposte

  • Re: Problema ad impostare un IF con condizione OR

    Devi usare la AND

  • Re: Problema ad impostare un IF con condizione OR

    A parte che ovviamente con la AND funziona....

    Grazie per il supporto.

    A volte (spesso) il mio neurone si inceppa, ed effettivamente se ripenso alla valutazione dell'IF usando OR oppure AND, giustamente l'AND è la soluzione giusta. Eppure il neurone continuava a ragionare in quel modo, cioè che l'OR era l'opzione giusta (tant'è che neanche ci avevo provato con l'AND, tanto che mi ero convinto).

    Mi sento stupido.....

    Grazie ancora

    Andrea

  • Re: Problema ad impostare un IF con condizione OR

    06/12/2024 - Jocman ha scritto:

    Se usassi un AND invece di OR significa che entrambe le considizioni devono essere valide, ma i 2 soggetti non possono avere entrambe le condizioni vere

    Non è quello che hai scritto nel codice, le condizioni devono essere entrambe FALSE per evidenziare il messaggio di accesso negato e quindi come già suggerito devi usare l'AND.

    Con gli AND/OR e le negazioni occorre prestare attenzione ...

    Suggerisco di pensare in positivo (nel senso del codice), oltre ad inserire il risultato di operazioni logiche direttamente in variabili (in modo da rendere più semplice il debug). Ecco delle possibili alternative al tuo codice :

    bGood = DLookup("Amministratore", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0)) Or DLookup("RespQualita", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0))
    IF bGood Then
    	'Accesso Consentito
    else
        MsgBox ("L'utente selezionato non è autorizzato all'accesso")
        Exit Sub
    End If
    bGood = DLookup("Amministratore", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0)) Or DLookup("RespQualita", "tblOperatori", "IDOperatore=" & Me.cbxOperatore.Column(0))
    IF not bGood Then
        MsgBox ("L'utente selezionato non è autorizzato all'accesso")
        Exit Sub
    End If
Devi accedere o registrarti per scrivere nel forum
3 risposte