Form mancato funzionamento proprietà allowedits

di il
25 risposte

Form mancato funzionamento proprietà allowedits

Buonasera a tutti.

Ho realizzato una form molto semplice per modificare i dati di una tabella. Le proprietà della form : immissione dati, consenti aggiunte, consenti modifiche, consenti eliminazione sono tutte impostate su no.

Nella Form è presente una casella combinata per la selezione del Record da visualizzare (cboAcronimo) e un pulsante “cmdModificaRecord” che pone su true la proprietà della maschera “allowedits” . Inoltre ho disseminato (probabilmente esagerando) di istruzioni per settare su False o su True, a seconda delle esigenze, la proprietà allowedits della form  gli eventi  load e current della form nonché gli eventi associati alla cboAcronimo (Gotfocus, LostFocus e AfterUpdate) .

In definitiva la procedura funzionava come desiderato: quando caricavo la form era possibile utilizzare la cboAcronimo per selezionare l'Acronimo da visualizzare e, dopo le scelta e il successivo requery, ogni modifica dei dati risultava inibita a meno del preventivo click sul comando cmdModificaRecord.

Successivamente ho creato una routine denominata ControlloCase che utilizza una funzione select per attivare/disattivare la visualizzazione di alcune caselle di testo e delle corrispondenti etichette della form, in relazione ai valori assunti dalla casella di testo idTipoRazionalizzazione.

Nella routine associata all'evento AfterUpdate della combobox cboAcronimo ho inserito il richiamo alla routine ControlloCase: la routine di controllo funziona però, per effetto del suo inserimento nell'evento AfterUpdate  della combobox , non funzionano più come prima le proprietà allowedits della form , nel senso che, dopo aver caricato la maschera e selezionato l'Acronimo utilizzando la cboAcronimo, il record caricato è immediatamente modificabile anche senza la preventiva pressione del tasto di comando cmdModificaRecord.

Nonostante abbia posizionato la routine ControlloCase in differenti righe dell'evento cboAcronimo AfterUpDate non sono riuscito a venire a capo del problema; ho anche provato a inserire in coda a ciascun case dell'istruzione select una istruzione Me.AllowEdits = False senza ottenere alcun risultato.

Magari mi sfugge qualcosa di banale ma, non avendo esperienza di programmazione VBA e non avendo trovato né sul web né sui manuali di cui dispongo, alcuna soluzione chiedo l'aiuto del Forum. Spero per lo meno di aver esposto il problema in maniera soddisfacente.

In ogni caso allego la schermata della Form e il modulo vba ad essa collegato dal quale, per non appesantire l'allegato, ho eliminato le parti non coinvolte nella problematica, individuate sulla scorta del Debug del modulo.

 

Private Sub cboAcronimo_AfterUpdate()
Me.Requery
Me.Corpo.Visible = True

ControlloCase

Me.AllowEdits = False
cmdModificaRecord.Enabled = True
cmdSalvaRecord.Enabled = False
Me.EsitoRevPeriod.SetFocus
End Sub


Private Sub cboAcronimo_GotFocus()
Me.AllowEdits = True
End Sub

Private Sub cboAcronimo_LostFocus()
Me.AllowEdits = False
End Sub

Private Sub Form_Load()
Me.AllowEdits = False
Me.Corpo.Visible = False
End Sub


Private Sub ControlloCase()

If Not IsNull(Me.idTipoRazionalizzazione) Then

    Select Case Me.idTipoRazionalizzazione

        Case 2 'interventi di razionalizzazione

        Me.InterventiRazionalizzazione.Visible = True
        Me.InterventiRazionalizzazione_Etichetta.Visible = True
        Me.PresuppostiAttuazione.Visible = False
        Me.PresuppostiAttuazione.Value = Null
        Me.PresuppostiAttuazione_Etichetta.Visible = False
        Me.NoteRazionalizzazione.Visible = True
        Me.Note_Etichetta.Visible = True

        Case 5 'alienazione

        Me.InterventiRazionalizzazione.Visible = False
        Me.InterventiRazionalizzazione_Etichetta.Visible = False
        Me.InterventiRazionalizzazione.Value = Null
        Me.PresuppostiAttuazione.Visible = False
        Me.PresuppostiAttuazione_Etichetta.Visible = False
        Me.PresuppostiAttuazione.Value = Null
        Me.NoteRazionalizzazione.Visible = True
        Me.Note_Etichetta.Visible = True


        Case 6 'cessione gratuita

        Me.InterventiRazionalizzazione.Visible = False
        Me.InterventiRazionalizzazione_Etichetta.Visible = False
        Me.InterventiRazionalizzazione.Value = Null
        Me.PresuppostiAttuazione.Visible = True
        Me.PresuppostiAttuazione_Etichetta.Visible = True
        Me.NoteRazionalizzazione.Visible = True
        Me.Note_Etichetta.Visible = True

        Case 7, 8, 9, 11, 12 'liquidazione, scioglimento, fusioni e recesso

        Me.InterventiRazionalizzazione.Visible = False
        Me.InterventiRazionalizzazione_Etichetta.Visible = False
        Me.InterventiRazionalizzazione.Value = Null
        Me.PresuppostiAttuazione.Visible = False
        Me.PresuppostiAttuazione_Etichetta.Visible = False
        Me.PresuppostiAttuazione.Value = Null
        Me.NoteRazionalizzazione.Visible = True
        Me.Note_Etichetta.Visible = True

        Case 12 'Recesso

        Me.InterventiRazionalizzazione.Visible = False
        Me.InterventiRazionalizzazione_Etichetta.Visible = False
        Me.InterventiRazionalizzazione.Value = Null
        Me.PresuppostiAttuazione.Visible = False
        Me.PresuppostiAttuazione_Etichetta.Visible = False
        Me.PresuppostiAttuazione.Value = Null
        Me.NoteRazionalizzazione.Visible = True
        Me.Note_Etichetta.Visible = True

    End Select

End If

End Sub

25 Risposte

  • Re: Form mancato funzionamento proprietà allowedits

    Forse dovrebbe essere modificato nel seguente modo

    Private Sub cboAcronimo_AfterUpdate()
    	Me.Requery
    	ControlloCase
    End Sub
    
    Private Sub cmdModificaRecord_Click()
    	Me.AllowEdits = True
    	Me.cmdChiudiMaschera.SetFocus   ‘ non so se si chiama così
    	Me.cmdModificaRecord.Enabled = False
    	Me.cmdEliminaRecord.Enabled = False   ‘ non so se si chiama così
    End Sub
    
    Private Sub Form_Current()
    	Me.cmdSalvaRecord.Enabled = Me.Dirty
    End Sub
    
    Private Sub cmdSalvaRecord_Click()
    	DoCmd.RunCommand acCmdSaveRecord
    	Me.Dirty = False
    	Me.cmdChiudiMaschera.SetFocus   ‘ non so se si chiama così
    	Me.cmdSalvaRecord.Enabled = False
    	Me.cmdModificaRecord.Enabled = True
    	Me.cmdEliminaRecord.Enabled = True   ‘ non so se si chiama così
    	Me.AllowEdits = False
    End Sub
    
    Private Sub ControlloCase()
    	cmdSalvaRecord.Enabled = False
    	Me.AllowEdits = False
    	Me.cmdSalvaRecord.Enabled = False
    	If IsNull(Me.idTipoRazionalizzazione) Then
    		Me.Corpo.Visible = False
    		Me.cmdChiudiMaschera.SetFocus   ‘ non so se si chiama così
    		Me.cmdModificaRecord.Enabled = False
    		Me.cmdEliminaRecord.Enabled = False   ‘ non so se si chiama così
    	Else
    		Me.Corpo.Visible = True
    		Me.cmdModificaRecord.Enabled = True
    		Me.cmdModificaRecord.SetFocus
    		Me.cmdEliminaRecord.Enabled = True   ‘ non so se si chiama così
    		Select Case Me.idTipoRazionalizzazione
            	Case 2 'interventi di razionalizzazione
            		Me.InterventiRazionalizzazione.Visible = True
            		Me.PresuppostiAttuazione.Visible = False
            		Me.PresuppostiAttuazione.Value = Null
            		Me.NoteRazionalizzazione.Visible = True
            	Case 5 'alienazione
            		Me.InterventiRazionalizzazione.Visible = False
            		Me.InterventiRazionalizzazione.Value = Null
            		Me.PresuppostiAttuazione.Visible = False
            		Me.PresuppostiAttuazione.Value = Null
            		Me.NoteRazionalizzazione.Visible = True
            	Case 6 'cessione gratuita
            		Me.InterventiRazionalizzazione.Visible = False
            		Me.InterventiRazionalizzazione.Value = Null
            		Me.PresuppostiAttuazione.Visible = True
            		Me.NoteRazionalizzazione.Visible = True
            	Case 7, 8, 9, 11, 12 'liquidazione, scioglimento, fusioni e recesso
            		Me.InterventiRazionalizzazione.Visible = False
            		Me.InterventiRazionalizzazione.Value = Null
            		Me.PresuppostiAttuazione.Visible = False
            		Me.PresuppostiAttuazione.Value = Null
            		Me.NoteRazionalizzazione.Visible = True
            	Case 12 'Recesso
            		Me.InterventiRazionalizzazione.Visible = False
            		Me.InterventiRazionalizzazione.Value = Null
            		Me.PresuppostiAttuazione.Visible = False
            		Me.PresuppostiAttuazione.Value = Null
            		Me.NoteRazionalizzazione.Visible = True
        	End Select
    	End If
    End Sub
    

    le etichette che sono associate a controllo seguono lo stato dello stesso.

    Comunque senza un file di esempio, che potresti postare, dove testare il codice è un pò difficile essere corretti.

  • Re: Form mancato funzionamento proprietà allowedits

    Buongiorno Stifone

    ti ringrazio innanzitutto per essere venuto in mio aiuto. Ho apportato le modifiche che mi hai suggerito ma la form continua a essere modificabile subito dopo la selezione dell'Acronimo. Mi rendo conto che sarebbe meglio essere più precisi. 

    Se hai la pazienza di spiegarmi in cosa consiste un file di esempio e cosa si intenda per postarlo lo faccio senz'altro.

  • Re: Form mancato funzionamento proprietà allowedits

    Consiste in un file di access che permetta la gestire della maschera in questione “frmInsEsitoRazionalizzazione”.

    Postarlo consiste nel salvare il file in un sito di condivisione, tipo Dropbox, poi dovrai copiare la stringa di collegamento che dovrai incollare nel nuovo messaggio che pubblicherai.

  • Re: Form mancato funzionamento proprietà allowedits

    Ok grazie Stifone. Ci provo con dropbox.

  • Re: Form mancato funzionamento proprietà allowedits

    https://www.dropbox.com/scl/fo/abl7er5nmqkfocfvbvebj/h?rlkey=u8rgw76b9nobjhrqkqpyfyleh&dl=0

    Buonasera Stifone

    ho proceduto come da tue indicazioni, almeno credo.

    Il link che ho postato permette di scaricare un file denominato  dbdapostare, 

    All'interno del db tra le maschere c'è la maschera “frmInsEsitoRazionalizzazione” il cui codice vba nel modulo associato è stato già modificato secondo le tue indicazioni.

    E' inoltre presente la maschera “frmInsEsitoRazionalizzazione1” con il codice vba prima delle modifiche. Come potrai notare, in questa versione del modulo associato se elimini il richiamo alla funzione ControlliCase nella routine cboAcronimo AfterUpDate,  dopo la selezione dell'Acronimo attraverso la combo cboAcronimo e la visualizzazione dei relativi campi, non è possibile modificare i campi a meno di non premere preventivamente  il pulsante cmdModificaRecord. 

    Se viene inserito il richiamo alla routine ControlliCase, a parità di tutte le altre condizioni, la maschera è immediatamente modificabile.

    Ti ringrazio per il tempo che mi stai dedicando e spero di non aver combinato casini con dropbox e con la pubblicazione della stringa di collegamento.

  • Re: Form mancato funzionamento proprietà allowedits

    Ciao,

    1. Prima di tutto togli in ogni dove Me.AllowEdits (ma proprio da tutte le parti compreso il FormLoad)
    2. Secondo togli in ognidove il richiamo della “controllocase”
    3. ComboBox scelta del record - evento AfterUpdate - impostare: 
      1. Me.AllowEdits = False
        1. ti fa vedere il record scelto ma non lo puoi modificare
      2. esegui “controllocase”
        1. per condizionare la visualizzazione dei campi etc…
    4. Su pressione del pulsante “modifcia records” impostare:
      1. Me.AllowEdits = True
        1. la form permette di modifcare il record secondo le modalità scelte in "controllocase"
    5. Su pressione del pulsante “salva le modifiche” impostare:
      1. Me.AllowEdits = False
        1. la Form non permette di modificare più il record
      2. esegui le altre tue operazioni……

    Non entro in merito alla “controllocase” anche perchè avrei fatto in modo completamente diverso e magari utilizzando i Tag delle TextBox etc etc etc… ma se la case che hai costruito soddisfa le tue esigenze, diciamo che potrebbe andare bene.  ;-)
    In merito, magari segui i consigli di Stifone.

  • Re: Form mancato funzionamento proprietà allowedits

    Buona sera Franco e ben trovato.

    Procedo senz'altro come da tue indicazioni. Se volessi anche entrare nel merito della “controllacase” e di come avresti fatto tu utilizzando i Tag mi faresti una grande favore……  certamente imparerei  argomenti nuovi.

    Grazie mille

  • Re: Form mancato funzionamento proprietà allowedits

    Buona sera Franco.

    Probabilmente ho equivocato qualche cosa ma, dopo aver eseguito tutte le tue indicazioni, come effetto, dopo l'apertura della maschera, la combobox risulta non modificabile, per la qualcosa non posso selezionare alcun record.

    D'altra parte le proprietà della form immissione dati, consenti aggiunte, consenti modifiche, consenti eliminazioni sono tutte impostate e “NO”.

    Dove sbaglio ?

  • Re: Form mancato funzionamento proprietà allowedits

    01/11/2023 - BarLudwig ha scritto:


    Buona sera Franco.

    Probabilmente ho equivocato qualche cosa ma, dopo aver eseguito tutte le tue indicazioni, come effetto, dopo l'apertura della maschera, la combobox risulta non modificabile, per la qualcosa non posso selezionare alcun record.

    D'altra parte le proprietà della form immissione dati, consenti aggiunte, consenti modifiche, consenti eliminazioni sono tutte impostate e “NO”.

    Dove sbaglio ?

    Togli Me.AllowEdits dalla Form Load e imposta in designer la proprietà allow edits della form a True

  • Re: Form mancato funzionamento proprietà allowedits

    Ok grazie. Provo e ti faccio sapere

  • Re: Form mancato funzionamento proprietà allowedits

    Buongiorno Franco

    ho proceduto con le tue indicazioni: in modalità design ho impostato a “SI” la proprietà “consenti modifiche” della form e ho settato a allowsedits = false la  proprietà  nel cbo AfterUpDate che, allo stato contiene le seguenti istruzioni:

    Private Sub cboAcronimo_AfterUpdate()
    Me.Requery
    Me.AllowEdits = False
    ControlloCase
    End Sub

    La maschera si apre, si può selezionare l'acronimo, vengono eseguiti i ControlliCase ma successivamente la maschera può essere liberamente modificata.

    In definitiva non sono ancora riuscito a risolvere il mio problema.

  • Re: Form mancato funzionamento proprietà allowedits

    Ciao, 

    devi avere per forza qualche evento che pone allowedits = true dopo afterupdate della combo acronimo

    Ho appena provato su una form e funziona

    Esegui un debug a partire dalla combo box acronimo e vedi cosa sblocca la form in edit.

  • Re: Form mancato funzionamento proprietà allowedits

    Buongiorno

    https://www.dropbox.com/scl/fi/769gh3lknz48t5qmrcvwx/dbdapostare1.accdb?rlkey=rpb46tya6jienjbzcsq3jo4b8&dl=0

    Ho postatto una copia del precedente db denominata  dbdapostare1 nella quale ho ridotto il codice della maschera frmInsEsitoRazionalizzazioni  a due  routine: AftercboAcronimo UpDate e ControlliCase  e il problema persiste.

    La proprietà della form “consenti modifiche” è impostata a si.

    Sottopongo il tutto nel caso Franco o Stifone abbiano ancora voglia di dedicare un pò di tempo al problema.

    Ringrazio in anticipo.

  • Re: Form mancato funzionamento proprietà allowedits

    Ciao,

    se puoi salvarlo compatibile con le versioni precedenti di MsAccess … io ho la versione 2013 
    altrimenti non riesco ad aprirlo 

Devi accedere o registrarti per scrivere nel forum
25 risposte