Newsgroup: it.comp.lang.visual-basic
Titolo: Vb6 - Begintrans

Buonasera, sto creando un programmino in vb6 che utilizza ado per 
connessione a database access in cui ci sono due tabelle, dipendenti 
l'una dall'altra. Una contiene un record che verrà relazionato a n 
record dell'altra tabella. Il fatto è che se inizio l'addnew della prima 
tabella e va a buon fine, e poi accadesse qualcosa che impedisce il 
ciclo do / loop che archivia tutti i record della griglia legati al 
record della tabella di cui sopra avrei dati non congruenti. Ho letto 
dell'istruzione begintrans e committrans, ma non riesco a capire come 
utilizzarla per il fine di cui ho bisogno. Potrebbe qualcuno darmi un 
chiarimento?
 
Grazie

Marco ha usato la sua tastiera per scrivere :

Le transazioni sono metodiche che consentono di rendere monolitica una 
sequenza di operazioni singole.
Quindi tu inizi una transazione (begin transaction), esegui tutto ciò 
che ti pare, poi la fai eseguire tutta in un colpo (commit transaction) 
o la annulli tutta insieme (rollback transaction).
Sinceramente non so cosa questo comporti in Access, e se un crash 
'tosto' lasci la transazione in uno stato che poi il successivo accesso 
da parte di qualcuno porti ad un rollback automatico o meno.
 
Da considerare anche che nel durante della transazione, i dati 
inseriti/modificati/cancellati sono visibili o meno da altri accessi, a 
seconda delle impostazioni di isolamento della transazione.
 
In breve, è così.
Poi in realtà sulle transazioni c'è un mondo, ma vedi tu se ti serve 
approfondire o meno...
 
Alberto
 
 


Grazie per la risposta Alberto, in realtà vorrei approfondire 
l'argomento. Concettualmente sei stato molto chiaro, tecnicamente vorrei 
capire meglio a cosa vado incontro. In questo caso comunque, ciò che 
vorrei evitare è che la fase di archiviazione, che è suddivisa in due 
parti, una in una tabella e una nell'altra, possa non andare a buon fine 
in tutti e due i casi e mi lasci il db sporco. Spiegandomi meglio, avrei 
da inserire ID - Nome e cognome nella prima tabella, nella seconda, con 
un ciclo, prendere i dati da una griglia di n righe e scriverli nella 
seconda tabella legandoli con l'id.
Se per ipotesi, nella griglia c'è un errore di integrità dei dati, 
l'archiviazione fallirebbe nella seconda tabella ma non nella prima e 
questo mi creerebbe il problema.
Lungaggine a parte, non capisco come poter effettuare la transazione per 
impedire che ciò avvenga.
 
Grazie

Nel suo scritto precedente, Marco ha sostenuto :

Se vuoi posso provare a riscrivere più lentamente.
 
Se scrivo che devi fare il Begin Tran, eseguire le operazioni, e poi 
alla fine confermarle tutte insieme con Commit Tran, posso riscriverlo 
uguale uguale, oppure puoi banalmente provare...
 
Alberto
 
 


Non so perchè...ma ho la sensazione che dovrei provare...

Nel suo scritto precedente, Marco ha sostenuto :

NEI MEANDRI dei ricordi e della rete....si trova..
 
DAO e le transazioni
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=153
 
 
ADO
http://www.w3schools.com/ado/met_conn_begintrans.asp
 
http://www.mrwebmaster.it/asp/articoli/transazioni-ado_509.html
 
 
Se va via corrente al server o va in crash il programma fra 2 
operazioni dentro una transazione che succede in access??? BOH 
....talvolta si sputtana tutto l'archivio ed il problema non si pone!
Credo però che access si scostruisca il file delle transazioni e 
recuperi da li quelle da fare in caso di crash
http://msdn.microsoft.com/it-it/library/bb243155(v=office.12).aspx
 
c'è da leggere bene....ed io a quest'ora non mi sforzo di capire tutto 
quello che c'è scritto (in inglese)!...leggilo e poi spiegacelo! :P
 
 
 
p.s.
Una cosa da tenere a mente...non si sà mai....
le transazioni ce l'hai con la connessione aperta LATO SERVER...quindi 
flag se ben ricordo adUseServer
se usi questo tipo di connessione...poi NON APRIRE (NO TI PREGO NO!) un 
altro post perchè non ti funziona RecordCount eh!!!!...vantaggi e 
svantaggi dell'avere una conenssione client o server....!!!
 
-- 
----- Italliaaaaa 3227! -----
Soldato Joker, cosa ci fa il soldato Palla di Lardo con quel fucile in 
mano nel mio fottutissimo bagno?
 
Sergente Artman [ da: "Full Metal Jacket" ]