Abilitare/Disabilitare dati con campo booleano

di il
18 risposte

Abilitare/Disabilitare dati con campo booleano

Buonasera a tutti,
all' interno di una maschera ho un campo booleano che se in condizione "vero" vorrei che impedisse agli utenti di poter modificare i dati all'interno della maschera mentre se "falso" i dati devono poter essere modificabili.
Ho provato con la funzione "allowEdits" ma probabilmente sbaglio qualcosa..
Come posso fare?
Grazie

18 Risposte

  • Re: Abilitare/Disabilitare dati con campo booleano

    1) Crea una nuova macro in visualizzazione struttura e apri la colonna condizioni

    2) Al primo rigo, Condizioni scrivi:
    [Maschere]![nomeMaschera]![nome campo booleano]=Vero
    ad Azioni scrivi ImpostaValore e sotto scrivi
    Elemento: [Maschere]![nomeMaschera].[AllowEdits]
    Espressione: Falso

    3) Al secondo rigo, Condizioni scrivi:
    [Maschere]![nomeMaschera]![nome campo booleano]=Falso
    ad Azioni scrivi ImpostaValore e sotto scrivi
    Elemento: [Maschere]![nomeMaschera].[AllowEdits]
    Espressione: Vero

    4) Salva la macro con nome X

    5) Vai in visualizzazione struttura maschera e all'Evento "Su corrente" associa la macro X.

    6) Salva la struttura maschera

    Io l'ho testato e funziona.
  • Re: Abilitare/Disabilitare dati con campo booleano

    AllowEdits è una proprietà di Maschera e potrebbe essere la cosa corretta, ma non ci hai spiegato come l'hai usata, e come ti spiego poi potrebbe non esserlo...!

    Di solito si fa così:
    
    Private Sub Form_Load()
        Me.AllowEdits=NOT Me!NomeCampoBooleano.Value
    End Sub
    
    Private Sub Form_Current()
            Me.AllowEdits=NOT Me!NomeCampoBooleano.Value Or Me.NewRecord
    End Sub
    Questo codice funziona, ma ha un problema... a parte i NUOVI RECORDS che sono ABILITATI alla modifica(come si evince dall'evento Current) una volta che il FLAG=TRUE non saranno MAI MODIFICABILI...
    Ora siccome non spieghi nemmeno se una volta DISABILITATI avrai mai la necessità di rivedere la scelta... ci sono troppe incognite nel tuo questito che dovresti chiarire.

    Eventualmente la scelta potrebbe essere diversa, magari legata ad un LOGIN con permessi di RIPRISTINO oppure ad una PWD...
    Vedi tu, facci sapere.
  • Re: Abilitare/Disabilitare dati con campo booleano

    Osvaldo: ho provato a creare la Macro come hai detto tu ma nel campo "Azione" della macro io non ho il valore "ImpostaValore" come mi hai detto tu. Forse abbiamo 2 versioni diverse di access. (Io ho la 2007). Ho provato ad utilizzare "ImpostaTempVar" mettendo nei campi NOME ed ESPRESSIONE quello che mi hai detto tu ma senza risultato.

    Alex: Scusa se non sono stato chiaro, cerco di spiegarmi meglio: questo campo booleano distingue i dati inseriti nella maschera tra definitivi o non definitivi.
    Ciò non esclude però che in futuro possano essere modificati ma dovrò essere io (attraverso un altra maschera) modificando la condizione del campo a decidere se renderli o meno liberi. Il campo booleano, nella maschera utente, ovviamente è "bloccato" per non dargli la possibilità di sbloccare la modifica.
    Ho provato la soluzione che mi hai dato e in effetti come anticipato una volta che il FLAG=TRUE i dati non sono più modificabili.
    Questo nel mio caso non va' bene perchè come già detto devo eventualmente poter dare il permesso di modificarli.
    Ciao
  • Re: Abilitare/Disabilitare dati con campo booleano

    Si ma se dici che li modificherai eventualmente da un'altra maschera, ti basterà fare in modo che quest'altra maschera(sotto PWD) non abbia la gestione del BLOCCO...

    Secondo me ti stai avvitando in nulla...!
  • Re: Abilitare/Disabilitare dati con campo booleano

    Può essere! No, attraverso un altra maschera io gestisco solo il campo booleano mettendolo nella stato "0" "-1".
    Dici che non c'è una soluzione più semplice oltre alla Psw?
  • Re: Abilitare/Disabilitare dati con campo booleano

    L'altra soluzione che ti accennavo prevede di BLOCCARE in EDITAZIONE i controlli...!
    Ti scrivo una bozza di codice...
    
    Option Compare Database
    Option Explicit
    
    
    Private Function ControlState(blState As Boolean)
        Dim ctl As Access.Control
        For Each ctl In Me.Controls
             Select Case ctl.ControlType
                   Case AcControlType.acTextBox, _
                        AcControlType.acComboBox, _
                        AcControlType.acListBox, _
                        AcControlType.acCheckBox, _
                        AcControlType.acOptionButton, _
                        AcControlType.acOptionGroup, _
                        AcControlType.acToggleButton
                        ' Questi sono TUTTI i controlli DATABOUND
                        If Len(ctl.ControlSource)>0 then ctl.Locked = blState
             End Select
        Next
    End Sub
    Quindi se su Load richiami questa Routine così
    
    Private Sub Form_Load()
         Call ControlState(Me!CampoBooleano)
    End Sub
    
    Private Sub Form_Current()
         Call ControlState(Me!CampoBooleano)
    End Sub
    Quindi metti un Button nel Pie di Pagina Maschera sul quale su CLICK scrivi:
    
    Private Sub NomeButton_Click()
        If MsgBox("Vuoi ABILITARE TUTTO...?", vbYesNo, "ALLERT") = vbYes Then
                Call ControlState(False)
        End If
    End Sub
    Se vuoi o meno pwd oppure gestisci un LOGIN iniziale...!

    Ora in realtà la cosa è un pò più complessa... in quanto ci sarebbero da discriminare CONTROLLI ASSOCIATI da CONTROLLI CALCOLATI... ma io ti ho fatto solo un'esempio...
  • Re: Abilitare/Disabilitare dati con campo booleano

    Dopo aver fatto un po' di prove ho deciso di utilizzare la soluzione di Osvaldo. Penso che possa rispondere alle mie esigenze.
    Grazie per l' aiuto.
    Buona giornata
  • Re: Abilitare/Disabilitare dati con campo booleano

    Quello che ti ha suggerito OsvaldoLaviosa è esattamente la stessa cose suggerita da me al primo giro in VBA... spero ti sia chiaro... Verifica solo che su APERTURA della Maschera il 1° record, nel caso abbia il FLAG sia disabilitato l'Edit in quanto non viene gestito il LOAD...!

    Il codice di OsvaldoLaviosa tuttavia non considera il NUOVO RECORD, quindi se l'ultimo è BLOCCATO, il nuovo non avrai modo di inserirlo.

    Vedi tu...
  • Re: Abilitare/Disabilitare dati con campo booleano

    Si infatti alla fine ho usato il tuo codice per il discorso nuovo record e direi che funziona tutto.
    Non essendo un esperto di VBA, nel caso di sottomaschere all'interno della maschera principale e possibile bloccare/sbloccare anche quelle sincronizzandole a quella principale?Che codice devo usare? Spero di essere stato chiaro!
  • Re: Abilitare/Disabilitare dati con campo booleano

    Per non bloccare il Nuovo Record, non si può pensare a un Valore predefinito Falso?
    Lo sblocco dei Vero, si potrebbe fare anche aprendo direttamente la tabella, ma Luca sa meglio di tutti come congeniare al meglio il tutto.
    Il problema di non vedere l'azione ImpostaValore, l'ho già sentita per Access 2007, non so come si fa (io ho 2003), ma pare ci sia un pulsantino che elenca molte più altre azioni macro.
  • Re: Abilitare/Disabilitare dati con campo booleano

    Quello l'ho risolto grazie! Si c'è un tasto che apre tutte le opzioni!! Ora mi rimane solo il problema, come ho scritto nel mio messaggio precedente, delle sottomaschere che vorrei legare a quella principale che contiene il campo booleano.
    Ciao
  • Re: Abilitare/Disabilitare dati con campo booleano

    luca81 ha scritto:


    nel caso di sottomaschere all'interno della maschera principale e possibile bloccare/sbloccare anche quelle sincronizzandole a quella principale?
    Potresti essere più chiaro?
    Tu maschera/sottomaschera ce l'avevi già?
    Hai un campo booleano anche in sottomaschera dove vorresti applicare lo stesso criterio macro (con sintassi diversa ovviamente)?
    Vorresti impedire di modificare i record della sottomaschera quando in maschera il campo booleano è Vero?
    La sottomaschera ce l'hai in Foglio dati oppure con apertura di clic pulsante/interruttore?
  • Re: Abilitare/Disabilitare dati con campo booleano

    SInceramente non capisco il problema... allo stesso modo in cui hai gestito la Form, applichi alla SubForm...!
    
    Private Sub Form_Load()
        Me.AllowEdits=NOT Me!NomeCampoBooleano.Value
        Me.NomeSubForm.Form.AllowEdits=NOT Me!NomeCampoBooleano.Value
    End Sub
    
    Private Sub Form_Current()
        Me.AllowEdits=NOT Me!NomeCampoBooleano.Value Or Me.NewRecord
        Me.NomeSubForm.Form.AllowEdits=NOT Me!NomeCampoBooleano.Value Or Me.NewRecord
    End Sub
    Intendevi questo...?
  • Re: Abilitare/Disabilitare dati con campo booleano

    Innanzi tutto chiedo scusa se non sono abbastanza chiaro!!
    Cerco di fare chiarezza! Si, la maschera principale ,che è l’unica ad avere il campo booleano di cui ho parlato, ha diverse sottomaschere inserite in una struttura a schede. Queste sottomaschere sono legate a quella principale tramite un campo “master” che è in comune tra di loro. Io vorrei ottenere come risultato che quando il campo booleano è in condizione “Vero” si blocchino i dati di tutto l’insieme, Maschera + sottomaschere. Per ora sono riuscito a bloccare col codice di Alex solo la Maschera con il campo booleano mi mancano quindi le sottomaschere.
    Alex: l’ultimo codice che mi hai dato va’ inserito nell’evento della maschera principale giusto?
Devi accedere o registrarti per scrivere nel forum
18 risposte