Newsgroup: it.comp.appl.access
Titolo: Salvatagigo dati

Salve a tutti,
ho un problema con la richiesta di salvataggio dei dati inseriti o
modificati in una maschera.
Ho letto la faq 3.13 nella sezione Forms del sito comune, che per comodità
riporto integralmente:
(D)
E' possibile far apparire un messaggio che mi chiede se voglio salvare i
dati appena modificati in una maschera?
(R)
Ogni volta che Access cerca di salvare un record, viene generato l'evento
BeforeUpdate (Prima di aggiornare) prima che il record venga realmente
salvato.
Quindi se vogliamo annullare l'aggiornamento del record, ci basta
intercettare questo evento.
Il seguente codice fa si che ogni volta che un record sta per essere
salvato, ci venga chiesto se vogliamo salvarlo o no; inoltre possiamo anche
decidere di annullare l'evento.
Private Sub Form_BeforeUpdate(Cancel As Integer)
   Dim retValue As Integer
   Dim strTtl As String
   Dim strMsg As String
   strTtl = "Salvare il record?"
   strMsg = "I dati sono cambiati." & vbCrLf & _
            "Vuoi salvare le modifiche?"
   retValue = MsgBox(strMsg, vbQuestion + vbYesNoCancel, strTtl)
   Select Case retValue
       Case vbYes
           'non fare nulla
       Case vbNo
           DoCmd.RunCommand acCmdUndo
       Case vbCancel
           Cancel = True
   End Select
End Sub
Purttroppo noto che l'affermazione "possiamo anche decidere di annullare
l'evento" non sempre è vera; nella mia maschera in questione, ad esempio, è
presente anche un pulsante di chiusura, del quale riporto il codice:
Private Sub cmdChiudi_Click()
On Error GoTo Err_cmdChiudi_Click
    DoCmd.Close
Exit_cmdChiudi_Click:
    Exit Sub
Err_cmdChiudi_Click:
    MsgBox "Si è verificato il seguente errore: Errore n° " & Err.Number & " - "
& Err.Description
    Resume Exit_cmdChiudi_Click
End Sub
Ora, quando l'utente tenta di cambiare record nella maschera senza aver
salvato, le tre opzioni del messaggio (vbYes, vbNo, vbCancel) funzionano
regolarmente, mentre quando tenta di chiudere la maschera, sempre senza
salvare, l'opzione vbCancel non funziona, perchè non risce ad annullare
l'evento legato al pulsante cmdChiudi.
Quello che vorrei realizzare è che se l'utente dedice di salvare o non
salvare, il programma agisca di conseguenza e chiuda la maschera, ma se
sceglie l'opzione "Annulla" presentata dalla msgbox, non salvi e non chiuda
nemmeno la maschera.
Spero di essere stato chiaro.
Saluti
Franco
 
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato via 
http://arianna.libero.it/usenet/
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it


Scusa, ma non ci riesco.
Ti invio il codice che ho immesso, per ogni evento, cercando di detagliare
il più possibile:
Questa è la funzione nuova che ho creato a livello di modulo:
Function Salvataggio() As Integer
    Dim Messaggio As String
    Messaggio = MsgBox("Non hai salvato. Vuoi salvare?", vbYesNoCancel,
"SALVATAGGIO")
    Select Case Messaggio
    Case vbYes
        Salvataggio = False
    Case vbNo
        Me.Undo 'annulla tutte le modifiche nel record
        Salvataggio = False
     Case vbCancel
        Salvataggio = True
    End Select
End Function
Ora la funzione sull'evento PrimaDiAggiornare della maschera:
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo Err_Form_BeforeUpdate
    Salvataggio
Exit_Form_BeforeUpdate:
    Exit Sub
Err_Form_BeforeUpdate:
    MsgBox "Si è verificato il seguente errore: Errore n° " & Err.Number &
Err.Description Resume Exit_Form_BeforeUpdate
End Sub
Segue la funzione del pulsante Chiudi:
Private Sub cmdChiudi_Click()
On Error GoTo Err_cmdChiudi_Click
    If Salvataggio = True Then Exit Sub
    DoCmd.Close
 Exit_cmdChiudi_Click:
    Exit Sub
Err_cmdChiudi_Click:
    MsgBox "Si è verificato il seguente errore: Errore n° " & Err.Number &
Err.Description Resume Exit_cmdChiudi_Click
End Sub
Infine la funzione del pulsante Salva:
Private Sub cmdSalva_Click()
On Error GoTo Err_cmdSalva_Click
    DoCmd.RunCommand acCmdSaveRecord
Exit_cmdSalva_Click:
    Exit Sub
Err_cmdSalva_Click:
    MsgBox "Si è verificato il seguente errore: Errore n° " & Err.Number &
Err.Description Resume Exit_cmdSalva_Click
End Sub
Succedono dei comportamenti strani:
1) se premo il pulsante cmdSalva parte il messaggio di richiesta di
salvataggio (???)
2) se chiudo senza salvare, tramite il pulsante cmdChiudi, parte
correttamente la richiesta, che però funziona bene solo in caso di risposta
negativa (non salva e chiude); se rispondo affermativamente, mi ripropone il
messaggio e solo al secondo tentativo, se rispondo sempre Sì, salva e
chiude; se sclego Annulla invece nessun problema (non salva e non chiude)
3) se chiudo la finestra dal pulsante di Windows (X) funzionano le prime due
opzioni, mentre ignora la scelta "Annulla", nel senso che salva comunque e
chiude la maschera
4) se apro la finestra, non effettuo nessuna modifica e chiudo tramite
pulsante cmdChiudi parte comunque il messaggio (???) mentre funziona se
chiudo con il pulsante di Windows
Naturalmente quello che mi aspetto è che:
1) se premo il pulsante cmdSalva, salvi le modifiche senza chiedere conferma
2) se scelgo di salvare, lo faccia al primo tentativo e non al secondo
3) se non faccio nessuna modifica non mi deve chidere nulla.
Sicuramente sbaglio, ma dove?
Grazie
Franco


 Franco
Fai una cosa. Creati una variabile a livello di maschera
che valorizzi con true quando ti interessa che ti faccia la domanda.
Ovvio che se premi salva valorizzi al contrario
