Newsgroup: it.comp.appl.access
Titolo: controllare che il record sia stato salvato prima di procedere

Ciao a tutti,
c'é un modo per sapere da codice se il record attivo é stato già
salvato oppure no ? (ho bisogno di mettere questo controllo
sull'evento click di un bottone)
Grazie

 ha scritto nel messaggio news:1180968081.3...@i13g2000prf.googlegroups.com...

[risposta]
If me.dirty then
    msgbox "sono salvo!"
else
    msgbox "ancora no..."
endif
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:1180968081.3...@i13g2000prf.googlegroups.com...
Ciao a tutti,
c'é un modo per sapere da codice se il record attivo é stato giŕ
salvato oppure no ? (ho bisogno di mettere questo controllo
sull'evento click di un bottone)
Grazie
---------------  RISPOSTA  ----------------
Se la maschera č associata ad un recordset, puoi usare l'istruzione:
if me.dirty then ...
vuol dire che un qualsiasi controllo della maschera associato ad un campo 
del record ha suběto una variazione ed il recordset non č stato ancora 
salvato.
Se ti occorsse, puoi anche "forzare" una situazione di questo tipo 
riassegnando ad un campo il suo stesso valore. Cosě:
me.campochiave = me.campochiave
In questo modo, me.dirty diventa sicuramente "true" anche se prima 
dell'istruzione appena detta non lo era.
Ciao
Antonio

grazie infinite

 Antonio
scusate se torno sull'argomento,
riguardo a quanto ho riportato dal messaggio di Antoino, é possibile
fare la cosa contraria ?? Ovvero é possibile fare una modifica e farla
passare come non fatta, in modo che me.dirty torni a false ???

 ha scritto nel messaggio 
news:1181561770.3...@q69g2000hsb.googlegroups.com...


me.undo
non ricordo se è sufficiente una sola volta, oppure eventualmente la 
inserisci 2 volte:
me.undo
me.undo
Ciao
Antonio

 ha scritto nel messaggio 
news:1181561770.3...@q69g2000hsb.googlegroups.com...
scusate se torno sull'argomento,
riguardo a quanto ho riportato dal messaggio di Antoino, é possibile
fare la cosa contraria ?? Ovvero é possibile fare una modifica e farla
passare come non fatta, in modo che me.dirty torni a false ???
[risposta]
Che vorresti dire?
Le modifiche se non ancora salvate le puoi annullare cosě:
If me.dirty then
    me.undo
end if
Se le hai salvate non puoi tornare indietro.
Se ti serve una cosa del genere allora devi non associare la form e gestire 
la registrazione dei dati da query/recordset...
Ciao.
-- 
Sergio MAZZA 

il punto é che voglio fare una modifica (che rimanga tale) ma non
voglio che il me dirty venga spostato a true;
questo mi permetterebbe di decriptare un campo su apertura di un
record e recriptarlo su chiusura senza che access lo prenda come
modifica del campo stesso (inoltre la tabella non verrebbe toccata)
Ho provato a fare la modifica del campo ed impostare subito dopo
me.dirty = false, ma viene preso come tentativo di salvataggio e fa
partire l'evento before_update

 ha scritto nel messaggio 
news:1181562977.7...@p47g2000hsd.googlegroups.com...

[risposta]
Se il dato è stato salvato cifrato tu lo dovresti solo far vedere decifrato 
in un controllo non associato; poi lo cifrerai gestendo l'evento "prima di 
aggiornare":
es.
if not isnull(me!nomeControlloDaCifrare) then
    me!nomeControlloAssociatoAlCampoCifrato = 
cifrati(me!nomeControlloDaCifrare)
end if
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Cerco di essere un po' più chiaro (cosa che spesso non mi riesce):
- attualmente io apro il record, se il record non é nuovo i dati
preesistenti vengono decriptati così: "cognomecriptato =
encrypt(Me.cognome, False) : Me.cognome.Value = cognomecriptato"
- il sistema prende questa come modifica, pertanto sull'evento
before_update non faccio altro che: "cognomecriptato =
encrypt(Me.cognome, True) : Me.cognome.Value = cognomecriptato"
Fin qui nessun problema, io però dovrei intercettare, nell'evento
before_update, eventuali modifiche (così da poterci mettere il solito
messaggino tipo :"non hai salvato le modifiche, sei sicuro di voler
continuare ?") e con il sistema che ho adottato l'apertura di ogni
record viene ritenuta una modifica (impedendo di fatto lo scorrimento
dei records)
L'idea era quella di decriptare all'apertura e di impostare a false il
me.dirty ma questo viene interpretato come tentativo di salvataggio e
fa partire il before_update con il solito messaggino

 fa partire il before_update con il solito messaggino
in effetti però anche se ci riuscissi poi levento before_update  non
partirebbe, quindi lasciate perdere i miei vaneggiamenti e grazie
comunque

 ha scritto nel messaggio 
news:1181565841.4...@c77g2000hse.googlegroups.com...
Cerco di essere un po' più chiaro (cosa che spesso non mi riesce):
- attualmente io apro il record, se il record non é nuovo i dati
preesistenti vengono decriptati così: "cognomecriptato =
encrypt(Me.cognome, False) : Me.cognome.Value = cognomecriptato"
- il sistema prende questa come modifica, pertanto sull'evento
before_update non faccio altro che: "cognomecriptato =
encrypt(Me.cognome, True) : Me.cognome.Value = cognomecriptato"
Fin qui nessun problema, io però dovrei intercettare, nell'evento
before_update, eventuali modifiche (così da poterci mettere il solito
messaggino tipo :"non hai salvato le modifiche, sei sicuro di voler
continuare ?") e con il sistema che ho adottato l'apertura di ogni
record viene ritenuta una modifica (impedendo di fatto lo scorrimento
dei records)
L'idea era quella di decriptare all'apertura e di impostare a false il
me.dirty ma questo viene interpretato come tentativo di salvataggio e
fa partire il before_update con il solito messaggino
[risposta]
Secondo me la stai affrontando dal verso sbagliato.
L'ultoma paragrafo conferma quello che ipotizzavo:
"...L'idea era quella di decriptare all'apertura e di impostare a false il
me.dirty ma questo viene interpretato come tentativo di salvataggio e
fa partire il before_update con il solito messaggino..."
Non hai bisogno di impostare a false il dirty, devi decifrare i valori in 
controlli non associati, e gestire l'evento "prima di aggiornare" per 
salvare (comunque) i dati; facendo visualizzare comunque il messaggio "Vuoi 
salvare"?
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:1181566768.9...@q75g2000hsh.googlegroups.com...


-----------  RISPOSTA  ---------------
Non sono entrato a pieno nel tuo ragionamento, ma ti suggerisco di non 
imbarcarti in cose strane che, sicuramente, ti procurerebbero un bel po' di 
problemi.
Piuttosto, invece di decriptare il campo nel controllo associato, perchè non 
lo decripti in un altro controllo, non associato, così non considera 
modificati tutti i records ?
Trattandosi poi di un solo controllo, puoi simulare il dirty del form quando 
viene modificato anche il campo decriptato, scatenando così il nuovo 
criptaggio ed il salvataggio del record.
Ciao
Antonio

grazie infinite ad entrambi, ora valuto cosa é meglio fare