Newsgroup: it.comp.lang.visual-basic
Titolo: Cagato 0 ci riprovo: Problema con le transazioni

Dunque oggi mi è saltato fuori questo problema:
in unprogramma ad un certo punto apro tre transazioni nidificate, la
prima in una funzione e le altre due in un altra funzione:
spazio_lavoro.begintrans
.
.
spazio_lavoro.begintrans
spazio_lavoro.begintrans
poi do il metodo Edit su un recordset e quando do il metodo Update su
quel recordset si genera un errore a run-time dovuto al fatto che
l'utente ha scritto del testo in un campo che doveva contenere una
data.
Io vorrei intercettare l'errore e fare si che l'Handler relativo
annulli le due transazioni piu' interne lasciando aperta la prima ma
quando nell'handler provo ad effettuare i due Rollback:
spazio_lavoro.Rollback
spazio_lavoro.Rollback
l'esecuzione mi si ferma sul secondo Rollback dicendomi che sto
provando a fare un Rollback senza nessuna transazione aperta cioe'
sembrerebbe che le due transazioni più interne si siano annullate per
i fatti loro e che sia rimasta aperta solo la prima.
Notare anche che se non si genera l'errore cioe' se l'utente scrive
tutti i dati in modo corretto la routine termina con tre CommitTrans
cioè effettivamente vi sono tre transazioni aperte.
Secondo voi cosa succede nel momento del errore di run-time che mi fa
perdere le due transazioni?
************************************************************************
*                                                                      *
*  Alfio l'elfo ha scritto tutto cio'                                  *
*  e dir di piu' lui or non puo'                                       *
*  manda a lui una mail, solo una                                      *
*  e di dir la tua non aver tema alcuna                                *
*                                                                      *
************************************************************************
*                                                                      *
*  email:                                                              *
*  
Aless...@emails.com
                                               *
*                                                                      *
*                                                                      *
************************************************************************

Alfio,
    nel tuo quesito mancano elementi fondamentali per la risposta tipo:
    Tipo del RDMS, acesso ai dati (DAO, ADO) e provider utilizzato (ODBC o
OLE-DB, nel caso di ADO)
Non mi stupisco che tu non riceva risposta...
Comunque in ADO le transazioni annidate (nested) sono tranquillamente
supporate (dipende dal provider) e il RollbackTrans abortisce solo gli
update effettuati dall'ultimo commit.
in DAO non so, non credo sia il migliore approccio per gestire transazioni.
bye,
Alessandro Scardova
scar...@tin.it
http://space.tin.it/computer/ascardov/


il problòema che ho è questo se apro 3 transazioni nidificate e do un
solo rollback mi si chiudono tutte e tre mentre
se uso il commitrans devo usarlo tre volte per chiudere le tre
transazioni,
tutto cio' e' regolare ?
se volessi fare in modo che due transazioni rimangano aperte dopo il
rollback potrei farlo usando degli spazi di lavoro diversi per
ciascuna transazione?
perche' se faccio un piccolo programma con un solo controllo data e
provo a dare due transazioni annidate lo stesso problema non mi si
verifica?
vi e' forse una qualche proprietà misteriosa dell'oggetto workspace da
impostare per stabilire come si comporta il metodo rollback?
altro terribile dubbio:
se uso lo stesso workspace ( workspace predefinito 0) nel programma
mentre esso è in esecuziobne contemporanea su due calcolatori in rete
collegati allo stesso database mi si incasina il tutto oppure
effetticvamente ciascun calcolatore usa il proprio workspace?
grazie mille per le risposte



Se non erro...
OGNI transazione, per essere indipendente dalle altre, deve girare in un
proprio Workspace.
Quindi: 3 transazioni = 3 Workspaces.
Prova a controllare nell'help in linea di VB, se trovi qualcosa di simile a
quanto ho scritto.
--
Roal Zanazzi
z...@iol.it

Molto probabilmente dipende dal fatto che ogni transazione deve essere fatta
in un workspace differente, altro non saprei...
Ciao Marco

Rodriquez Marco wrote:

  In realtà mentre è vero che si possono usare spazi differenti ( e faro così
per aggirare il problema) è anche vero che sarebbe in teoria possibile usare un
solo spazio con transazioni nidificate ( se no possono nidificare fino a cinque
secondo i manuale microsoft) in realtà però le trans. nidificate funzionano un
po come pare a loro dato che alcune volte un rollback annulla tutto il ciclo
(cioè tutta la nidificazione) altre volte un rollback annulla solo la trans. più
interna...
Vallo a capire.......
************************
Alfio l'elfo


In effetti, certe cose sono vere solo sui manuali, quando ci sono...
Ciao Marco