Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Annullare la cancellazione di un record

26 views
Skip to first unread message

Pierpsoft

unread,
Sep 20, 2010, 7:07:01 AM9/20/10
to
Ciao a tutto il ng!

A volte scrivo post qui, per chiedere chiarimenti... stavolta (data da
segnare nel calendario), sono io che vi informo di un aspetto, se vi
interessa (magari è una sciocchezza, ma io l'ho scoperta ora e scrivo
tutto di seguito).

Praticamente, devo gestire la cancellazione di un record da una
sottomaschera. Cancellando quel record, devo andare a cancellare altri
dati in altre maschere del DB, maschere non direttamente collegate al
record, quindi la cancellazione automatica in tabelle non collegate,
non può essere fatta in automatico, con l'integrità referenziale. Come
fare?
L'evento Form.OnDelete viene generato quando premo CANC sul record.
Poi, c'è l'evento "Prima della conferma di cancellazione" che si
chiama BeforeDelConfirm, che viene generato PRIMA dell'apparizione del
messaggio di conferma di Access (se attivo) e "Dopo della conferma di
cancellazione" AfterDelConfirm, che viene generato dopo che l'utente
ha detto "OK, cancella" e che il record è stato cancellato.

Ora. Nel mio caso, l'utente preme CANC. Sull'evento OnDelete prelevavo
l'ID del record da cancellare. Access chiedeva conferma, cancellava il
record, e poi generava l'evento AfterDelConfirm in cui con una query
cancellavo i record in cui il campo di riferimento conteneva l'ID
prelevato prima della cancellazione (per inciso: l'ID non poteva
essere salvato direttamente nell'evento AfterDelConfirm perché in
quell'evento il record di solito è già stato cancellato).
Però, se l'utente premeva CANC, prelevavo l'ID del record nella
sottomaschera, Access chiedeva conferma e l'utente diceva "No, annulla
la cancellazione", era un problema! Perché l'evento AfterDelConfirm
veniva comunque generato e venivano cancellati i record con l'ID
prelevato precedentemente.
Come fare?
RIsolto: Nell'evento OnDelete posso mettere "DoCmd.setwarnings False"
perché posso chiedere direttamente io la conferma all'utente con un
MsgBox, poi, se l'utente prosegue con la cancellazione, tutto ok,
altrimenti, se l'utente vuole annullare la cancellazione, basta
inserire CANCEL = FALSE, e la cancellazione del record viene
annullata. Nessun altro evento viene generato... e questa è una cosa
che ho scorperto adesso.
In realtà Cancel è una variabile intera che viene passata all'evento
OnDelete, se questa è TRUE, la cancellazione avviene. Se questa è
FALSE, la cancellazione si intende annullata e se si termina la
routine Form_OnDelete, non essendo generato nessun altro evento, tutto
finisce lì... non c'è l'evento AfterDelConfirm.
Bello no? :)

Scusate la lungaggine ma dovevo esporre tutto con calma, altrimenti
non mi capivo più neanch'io.
Spero che la mia "scoperta" dell'acqua calda, possa essere utile a
qualche altro che come me, fin'ora non lo sapeva.

Ciao a tutti.

Message has been deleted
0 new messages