Newsgroup: it.comp.appl.access
Titolo: Transazioni

Salve a tutto il NG. Ho questo problema:
tramite una maschera collegata ad una tabella di anagrafica inserisco i vari
record. Quando l'utente preme il pulsante SALVA, devo forzare da codice un
salvataggio nella tabella, per poter recuperare il valore del campo ID
(campo numerico autoincrementante) assegnatomi DOPO il salvataggio; con tale
valore vado poi a eseguire determinate operazioni che, se hanno esito
positivo, mi comportano la chiusura della maschera, altrimenti, se l'esito č
negativo, devo annullare il record appena salvato e posizionare il cursore
nel primo campo della maschera per far sě che l'utente reinserisca dei
valori corretti.
Ora, l'unico modo che ho trovato per salvare il record nella tabella SENZA
CHIDUERE LA MASCHERA o spostarmi di record ecc.. č:
DoCmd.RunCommand acCmdSaveRecord
Ho pensato di mettere in testa ed in coda alla routine il BeginTrans ed il
CommitTrans e, nel caso qualcosa non vada a buon fine, il RollBack. La mia
sorpresa č che Access se ne frega delle transazioni, nel senso che
DoCmd.RunCommand acCmdSaveRecord salva il record punto e basta.
L'idea era:
BeginTrans
DoCmd.RunCommand acCmdSaveRecord
ID=Me(Campo_ID)
..esegui operazioni con ID
se errore RollBack:esci
Committrans
Chiudi
ma non funziona. Addirittura ho provato semplicemente a creare una maschera
per l'inserimento di un record in una tabella con un campo. Prima di aprire
la maschera, dalla finestra di debug digito: BeginTrans, poi apro la
maschera, inserisco il record, la chiudo, torno sulla finestra di debug
edigito Rollback e mi da "Si č cercato di confermare o annullare una
transazione senza prima utilizzare BeginTrans" - il record č correttamente
salvato nelal tabella
Se invece apro direttamente la tabella ed inserisco il record a mano, non mi
viene visualizzato l'errore di cui sopra, ma comunque il record non viene
scartato dal Rollback.
Sembra quindi che le transazioni funzionino solo utilizzando il
CurrentDatabase.Execute.. e non direttamente con gli oggetti Access.
Ma la cosa č strana. Funziona davvero cosě?? C'č un modo alternativo?? Non
vorrei ridurmi a utilizzare Access con i soli INSERT INTO, UPDATE e DELETE
FROM solo perchč le transazioni non funzionano.
Grazie a tutti.

 CurrentDatabase.Execute.. e non direttamente con gli oggetti Access.
Ovvio.
CurrentDB.Execute (non CurrentDatabase) opera sfruttando il motore database
appunto.
Usa l'evento beforeUpdate e vedrai che cio' che vuoi fare trovera' rapida e
semplice soluzione.
Sib

OK, quello dell'ID era solo uno dei motivi per i quali utilizzo le
transazioni. Ho altri punti del programma in cui devo tentare il
salvataggio, eseguire operazioni e se tutto non va a buon fine annullare
tutto il processo.
In pratica mi dici che un record salvato tramite maschere o tabelle aperte
direttamente in Access non č sottoponibile a transazione?? Esiste un modo
per annullare il salvataggio, oltre a quello di mettere tutto il codice in
BeforeUpdate visto che in quel punto ancora non vedo il record salvato??
"Sib" <si...@SPAMMiol.it> ha scritto nel messaggio
news:GJLj8.63208$Ns4.2...@news2.tin.it...


 BeforeUpdate visto che in quel punto ancora non vedo il record salvato??
Rispondi dopo il quoting.
Non vedi il record nella tabella, ma tutti i controlli della maschera sono
perfettamente leggibili, puoi farli da li' i controlli.
Comunque se proprio ti piace la strada che vuoi percorrere, puoi sempre
eliminarlo dopo il record che non va bene.
Sib