Newsgroup: it.comp.appl.access
Titolo: Gestire il comando "Annulla"

Ciao a tutti quelli che lavorano anche a ferragosto.
Ho una maschera in cui ho inserito dei pulsanti "Inserisci",
"Modifica", "Elimina", "OK" ed "Annulla" che controllo io da codice e
tramite i quali gestisco ogni modifica alle tabelle.
In particolare, il comando Annulla utilizza "DoCmd.RunCommand
acCmdUndo", mentre il comando OK utilizza "DoCmd.RunCommand
acCmdSaveRecord", per cui è come se l'utente utilizzasse i comandi
standard disponibili a menù.
Situazione:
- seleziono un record e premo "Modifica"; i campi si abilitano per
consentire l'inserimento dei dati
- inserisco e/o modifico i dati, poi premo "OK" per confermare il
tutto
- a questo punto nel menù Modifica è disponibile (ovviamente) il
comando "Annulla" che mi permette di annullare il salvataggio dei dati
- seleziono un altro record e vado anche qui in "Modifica", ma prima
di inserire qualcosa ci ripenso
- siccome il programma non permette di cambiare record o di uscire
quando si è in modalità "Modifica", occorre ripristinare con "OK"
oppure con "Annulla"
Problema:
se a questo punto premo "Annulla" ottengo l'annullamento del comando
precedente (il salvataggio dei dati dell'altro record) in quanto è
ancora l'ultima operazione eseguita.
Quello di cui avrei bisogno (se qualcuno non ha un'idea migliore) è di
poter resettare il comando "Annulla" quando entro in modalità
"Modifica", in modo che l'uscita non possa poi avere conseguenze su
eventuali operazioni fatte precedentemente.
Spero di essere stato chiaro e ringrazio tutti.

 ha scritto nel messaggio
news:eafd4496.02081...@posting.google.com...

Io ho realizzato un Modulo di Classe che abbinato a varie OPZIONI da
inserire nella FORM(ovviamente non relativi alla SUBFORM) gestisce
un pò tutte queste situazioni sfruttando in parte Transazioni, in parte
i vantaggi delle FORM non associate.
Non sò se sono stato chiaro, ma posso inviarti un DEMO...!!
@Alessandro.

 ha scritto nel messaggio
news:QrS59.60445$lu5.1...@twister1.libero.it...

Ioho lo stesso tipo di problema.
Saresti così gentile da inviare il demo anche a me?
Ti ringrazio!

 ha scritto nel messaggio
news:CX069.60037$n04.1...@twister2.libero.it...

Scusatemi, non vorrei giungere inopportuna, ma Alessandro potresti inviare
anche a me la demo? Grazie mille e buon ferragosto a tutti.
Ciao Rita


Dopo Ferragosto...........!!!
Ciao a tutti......!!
@Alex.

 tramite i quali gestisco ogni modifica alle tabelle.
In origine avevo i tuoi stessi desideri: dopo tante installazioni di ogni
tipo ho risolto nel modo più semplice eliminando il comando Annulla da
qualunque form!
Fa solo casino, gli operatori non sono programmatori e hanno bisogno di
maschere semplici ... se si pentono di quello che hanno inserito se lo
rimodificano a manina :-))

...

In fondo hai perfettamente ragione, e leggendoti mi è venuta un'idea.
Quando l'utente entra in modalità Modifica, copio tutto il record
corrente in un vettore; se poi preme il pulsante Annulla, invece di
lanciare il comando "DoCmd.RunCommand acCmdUndo" (che potrebbe avere
le conseguenze che ho detto), recupero i dati dal vettore e aggiorno
il record.
Non l'ho ancora provata ma penso che risolva il problema senza crearne
altri. Che ne pensate?

 altri. Che ne pensate?
    Non ho le idee chiare in proposito perche' generalmente lavoro con
controlli non associati e in tal caso quello del vettore e' un comportamento
direi normale. Ma mi piacerebbe approfondire la questione per i controlli
associati.
    Possono giocare qualche ruolo nella faccenda:
        Form.Undo?
        <Controllo>.OldValue?
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

         <Controllo>.OldValue?
Yeah! Centro pieno per entrambi i suggerimenti.
Il Form.Undo spazza via qualsiasi ipotesi da me fatta in precedenza,
perchè influisce solo sul record corrente e non crea problemi (come
invece fa l'acCmdUndo) neanche nel caso in cui non ci sia niente da
annullare.
Se invece si ha bisogno di qualcosa di più sofisticato (magari per
applicarlo solo ai controlli con un certo nome o di un certo tipo), la
proprietà OldValue permette di reimpostare il valore precedente alla
modifica; basta "spazzolare" i controlli della form in un ciclo "For
each...".
Per quanto mi riguarda, il Form.Undo mi va benissimo e mi ha permesso
anche di snellire la routine relativa. Grazie del suggerimento.
Ciao a tutti