Impedire chiusura Access mediante la X posta in alto a dx

di il
11 risposte

Impedire chiusura Access mediante la X posta in alto a dx

Salve a tutti,
c'è la possibilità di nascondere o impedire la chiusura di access tramite la X posta in alto a dx?

In pratica vorrei che gli utenti per uscire dal DB utilizzassero il pulsante di chiusura posto sulla Form e non la X in alto a dx.

Come posso fare per nascondere la X, o inibire la X in modo da impedire l'uscita da Access?

Grazie mille

Marco
Allegati:
12505_b4252977658d7e0464069fb76de2950d.jpg
12505_b4252977658d7e0464069fb76de2950d.jpg

11 Risposte

  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Gestisci opportunamente il Cancel del Form_Unload
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Ciao Oregon,
    ho già provato ad agire su Form_Unload.
    Il problema è che non riesco a separare i 2 eventi, quello determinato dal pulsante di chiusura e quello determinato dalla X poichè in Form_unload ho inserito un msgbox e cansel=true, ma viene richiamato anche se chiudo tutto tramite il pulsante di chiusura in quanto con docom.quit fa poi generare Form_unload e quindi mi appare il messaggio anche se chiudo con il pulsante.
    Non so se mi sono spiegato.
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Ovviamente devi introdurre una variabile che ti indichi la provenienza dell'evento.

    Normalmente a 0, la poni ad 1 quando usi il pulsante di chiusura. Se la variabile vale 0 fai Cancel=true, altrimenti no
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Ho provato utilizzando una variabile pubblica ma non funziona.
    Con la variabile pubblica ho il messaggio e blocco l'uscita da access, ma quando utilizzo il pulsante invece di uscire direttamente, appare prima di nuovo il messaggio e poi esco.
    allego codice
    
    Option Compare Database
    Public uscita As Integer
    
    Private Sub form_load()
    DoCmd.SelectObject acTable, , True
    RunCommand acCmdWindowHide
    DoCmd.RunCommand acCmdWindowHide
    DoCmd.ShowToolbar "Ribbon", acToolbarNo
    End Sub
    
    Private Sub Comando0_Click()
    uscita = 1
    DoCmd.Quit acQuitSaveAll
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    If uscita = 1 Then
      Cancel = False
      Else
      Call MsgBox("Devi premere il pulsante Esci", vbInformation, "Informazione")
      Cancel = True
      End If
    End Sub
    
    
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    
    If uscita = 0 Then
      Call MsgBox("Devi premere il pulsante Esci", vbInformation, "Informazione")
      Cancel = True
    End If
    
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Ciao Oregon,
    scusa ma non funziona, è come prima ossia blocco l'uscita utilizzando la X (e va bene), ma quando premo il pulsante di chiusura prima mi appare di nuovo il messaggio "Devi premere il pulsante Esci" e poi si chiude.

    Ho visto che il problema sta nella variabile posta sul pulsante esci, ossia quando premo il pulsante esci la variabile pubblica "uscita" si setta a 1, però ssubito dopo quando viene eseguito il comando DoCmd.Quit, che richiama la sub From_Unload, la variabile uscita si setta a 0 (in pratica come docmd.qui si attiva uscita ridiventa = 0) per cui quando form_unload viene eseguito uscita = 0 e quindi appare di nuovo il messaggio.

    Il problema sta in docmd.quit che azzerra la variabile per cui IF risulta sempre vera "uscita = 0" sempre.

    Come se ne esce da questa situazione?
    Grazie
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Normalmente si utilizza una form Hidden(nascosta) vuota con dentro nulla se non il codice su Unload come ti ha suggerito Antonio di annullamento evento che forza cancel=True se non si vuole chiudere..

    Ti suggerisco di aprire su AutoExec la form di inibizione in modalità Hidden e delegare a questa form specifica la gestione di chiusura.

    Detto ciò anche ALT+F4 ha il medesimo effetto...
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Ho provato ad utilizzare una form hidden e inserendo qui il codice di uscita, ma alla fine in ogni caso quando premo il pulsate Esci mi appare sempre il solito messaggio che per uscire devo utilizzare il pulsante.
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Visualizza il valore della variabile prima della if.
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Su modulo1 ho inserito la
    public uscita as integer

    ora ho 2 maschere, maschera1 dove ho il pulsante di uscita ed è visibile, e Chiusura che è una maschera visibile=no dove ho inserito il codice di uscita.

    Premetto che come avete potuto notare io non sono un esperto di Access, quindi su maschera1 c'è questo codice:
    
    Private Sub Comando0_Click()
    uscita = 1
    
    DoCmd.OpenForm "Chiusura"
    
    
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
    
        Call MsgBox("Devi premere il pulsante Esci", vbInformation, "Informazione")
        Cancel = True
        uscita = 2
        
    End Sub
    

    mentre su Chiusura c'è questo codice:
    
    
    Private Sub form_load()
    If uscita = 1 Then
    DoCmd.Quit acQuitSaveAll
    Else
    DoCmd.Close acForm, "Chiusura"
    End If
    End Sub
    
    

    Il problema sta in Form_unload di maschera1, che nel mio caso è la maschera principale del DB.

    Quindi anche se premo il pulsante esci, carico la maschera di Chiusura che controlla la variabile per capire da dove si arriva, alla fine della fiera in ogni modo la maschera1 si deve chiudere e quindi sempre si attiva form_unload e quindi Messaggio "Devi premere il pulsante Esci".

    Io da questa situazione non riesco a venirne fuori, sembra il cane che si morde la coda
  • Re: Impedire chiusura Access mediante la X posta in alto a dx

    Andiamo a LOGICA.
    Devi impedire la chiusura di Access su Condizione, a prescindere da quale sia la Maschera aperta.
    Per questo motivo si usa SOLO la maschera Hidden per gestire questa cosa, tutte le altre Maschere non devono avere NULLA a che vedere con questo aspetto.
    Se una maschera deve chiudersi su Condizione, allora su quella maschera inserirai una condizione specifica per quella ma non confonderlo con l'inibizione alla chiusura di Access delegato ESCLUSIVAMENTE alla Maschera Nascosta.

    Detto questo quale sarebbe la condizione per poter chiudere Access....? Io non l'ho capita...!
    Se tutte le altre maschere sono chiuse [DoCmd.Quit acQuitSaveAll] non serve a NULLA... perchè è già stato fatto o annullato alla chiusura di ogni singola Maschera BOUND(Associata a fonte dati).
    Contrariamente ad altri linguaggi, Access sfruttando Oggetti Bound, chiude le transazioni quasi subito... basta spostarsi di Record...

    Il fatto tu non sia esperto rischia di farti prendere abbagli di strategia.
Devi accedere o registrarti per scrivere nel forum
11 risposte