Newsgroup: it.comp.appl.access
Titolo: Uscita da una maschera di immissione dati

Salve a tutti,
il problrma è questo:
a fronte dell'evento prima di aggiornare effettuo dei controlli preventivi
su alcuni controlli della maschera, può capitare però che all'aggiunta di un
nuovo record ci sia un ripensamento da parte dell'utente il quale non voglia
più inserire nessun dato e per questo chiude la maschera. Access visualizza
il messaggio E' possibile che si sia verificato un errore durante...la
chiusura dell'oggetto comporterà la perdita delle modifiche
apportate...chiudere? Ame può stare anche bene, ma alla riapertura della
medesima maschera il contatore numerico salta di uno (precisamente quello
che si riferisce al ripensamento) portandosi ad un id successivo,e questo
non va bene. Come posso evitare questo?
Grazie a tutti,
salvatemi ancora una volta

 ha scritto nel messaggio
news:97notv$p6r$1...@pegasus.tiscalinet.it...

Per quelle che sono le mie cognizioni, se la chiave primaria della tabella
che è origine record della maschera è di tipo contatore, non credo che il
problema è risolvibile.
Prova così.
Se la tua tabella si chiama Tabella1 e la chiave primaria si chiama ID, dai
a ID un tipo campo uguale a Numerico anziché Contatore.
Ipotizziamo che il controllo della maschera associato al campo ID si chiami
anche lui ID.
Setta a No la proprietà Abilitato e a Si la proprietà Bloccato del controllo
ID.
Nella proprietà Valore predefinito del controllo ID scrivi:
IIf(IsNull(DMax("[ID]";"Tabella1"));1;DMax("[ID]";"Tabella1")+1)
Questo ti servirà a rendere nuovamente automatico l'incremento della chiave
primaria.
In TESTA alla routine VBA, che hai già generato a fronte dell'evento "Prima
di aggiornare" della maschera, AGGIUNGI le seguenti righe di codice:
If Me.NewRecord Then
    Dim IntNuovo As Integer, strTitolo As String
    Dim IntFinestraMsg As Integer, strMsg As String
    strTitolo = "Conferma di inserimento"
    strMsg = "Vuoi veramente inserire un nuovo record?"
    IntFinestraMsg = vbYesNo + vbQuestion
    IntNuovo = MsgBox(strMsg, IntFinestraMsg, strTitolo)
    If IntNuovo = vbNo Then
    Me.Undo
    Cancel = True
    Exit Sub
    End If
End If
' Altro codice che hai già scritto per altre verifiche
.................
.................
Così facendo, Access chiederà all'operatore la conferma se vuole veramente
inserire un nuovo record: se la risposta sarà NO, verranno cancellati i
valori di tutti i controlli della maschera, verrà annullato l'evento di
registrazione ed il valore della chiave primaria non "salterà di uno". Non
riceverai alcun messaggio da Access.
Dovrebbe funzionare, facci sapere.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 Grazie Roberto,
ad una cosa simile avevo pensato anch'io, e anche se funziona sicuramente
(anche non avendo provato, ma mi fido), costringerebbe l'utente a confermare
ogni volta l'inserimento di un dato e a parer mio diventerebbe a lungo
andare scocciante, comunque io provo a testare la sua pazienza! si dice: hai
voluto la bicicletta? e mò pedala!
Grazie ancora Roberto
Ciao


Se gli altri controlli che effettui nella routine "Prima di aggiornare" sono
sufficienti per annullare l'evento di registrazione (Cancell = True), puoi
evitare di chiedere esplicitamente all'operatore la conferma
dell'inserimento.
In questo caso basterebbe gestire la chiave primaria come tipo numerico
anzichè come contetore.
