Prova così:
1) elimona il pulsante di chiusura maschera impostando a No la proprietà
Pulsante chiusura.
2) Dichiarati in un modulo del database una variabile globale di tipo
Booleano chiamata Pippo.
3) Inserisci nella maschera un pulsnte di comando pigiando il quale
chiuderai la maschera.
4) A fronte dell'evento "Su clic" del pulsante di comando di cui al punto
3), genera il seguente codice VBA:
Pippo = True
DoCmd.Close
5) A fronte dell'evento "Su apertura" della maschera genera il seguente
codice VBA:
Pippo = False
6) A fronte dell'evento "Prima di aggiornare" della maschera genera il
seguente codice VBA:
If Pippo = True Then
If MsgBox("Vuoi salvare il record corrente", _
vbQuestion + vbYesNo, _
"Chiusura maschera") = vbNo Then
Cancel = True
End If
End If
Dovresti però proteggerti anche dalla possibilità che l'operatore possa
chiusere il database, nel qual caso il record digitato a metà verrebbe
comunque registrato. Per fare questo trovi due FAQ FAQ sul Sito Comune (link
qui sotto), una che elimina il pulsante di chiusura di Access ed un'altra
che inibisce i tasti Alt+F4; naturalmente metterai un tasto per la chiusura
del database; a fronte dell'evento "Su clic" di tale pulsante, prima di
chiudere Access imposterai a True Pippo.
Se preferisci, comunque sia, puoi chiedere SEMPRE il consenso per registrare
un nuovo record; anche di questo trovi un esempio nel Sito Comune.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------
Oppure salvi tutto il record su un'array e lavori su quello, e se alla fine
vuoi scaricare tutto sul database lo fai altrimenti esci e non succede
niente.
Questo è il miglior metodo in assoluto.
Ciao faina
Nell'evento Unload della maschera annulla le variazioni es...
Private Sub Form_Unload(Cancel As Integer)
On Local Error Resume Next
DoCmd.RunCommand acCmdUndo
End Sub
On local error serve quando chiudi la maschera e non ci sono variazioni, in
questo caso acCmdUndo darebbe errore.
Ciao Giorgio.
ciao e buongiorno
MAssimiliano
--------------------------------
Inviato via http://usenet.libero.it
Esatto!!! :-))
> ciao e buongiorno
Buongiorno
> MAssimiliano
Rispetto il tuo punto di vista ma non lo condivido assolutamente.
Ti ringrazio per la spiegazione così particolareggiata, ma c'è qualcosa
che non funziona: quando premo il pulsante la maschera si chiude ma il
problema si ripresenta. Ho seguito scrupolosamente le tue indicazioni,
l'unico dubbio che ho riguarda la creazione del modulo con una "variabile
globale di tipo Booleano" (????) che ho interpretato con "Dim Pippo As
String", va bene? inoltre, devo dare al modulo un nome particolare?
Ciao
faina.
--
Per quanto riguarda cosa sia una variabile globale leggi cosa dice l'help.
Scusa se ti rompo ancora, ho dato un occhiata all'help e, se ho capito
bene, ho inserito nel modulo "Public Pippo As Boolean". Ora il pulsante
funziona e, se voglio, il record non viene salvato. Purtroppo, però, ho
notato che nel momento in cui rientro nella maschera e vado ad inserire
un nuovo record il contatore va al numero successivo. Hai un' idea perchè
questo non avvenga? Ciao
E' normale che un campo contatore si comporti così e non puoi intervenire in
nessun modo, visto che non si può intervenire sul valore di un campo
contatore; in realtà un intervento da fare ci sarebbe: dopo aver rinunciato
alla registrazione di un nuovo record dovresti compattare il database: per
compattare un database da codice VBA vai sul Sito Comune (link qui sotto):
nella Sezione General ci trovi due o tre FAQ che trattano l'argomento.
D'altra parte le chiavi primarie servono per rendere i record univoci, per
la qual cosa non ha alcuna importanza se nei valori della chiave primaria ci
sono o meno dei buchi.
Prova a valutare l'alternativa di cambiare il tipo dato della chiave
primaria da Contatore a Numerico e di gestirti tu l'incremento.