Newsgroup: it.comp.appl.access
Titolo: Successione apertura e chiusura recordsets all'interno di una transazione DAO (Workspace method)

Buongiorno a tutti.
Forse la mia domanda sarà un pò banale, ma su GoogleGruppi non sono riuscito a trovare una risposta, 
e tantomeno su MSDN.
Volevo sapere se le 3 successioni
-----------------------
Apertura transazione
Inizio transazione
Apertura Recordsets
Modifica dati
Chiusura Recordsets
Commissione transazione
Chiusura transazione
---------------------
Apertura transazione
Apertura Recordsets
Inizio transazione
Modifica dati
Commissione transazione
Chiusura Recordsets
Chiusura transazione
---------------------
Apertura Recordsets
Apertura transazione
Inizio transazione
Modifica dati
Commissione transazione
Chiusura transazione
Chiusura Recordsets
---------------------------
sono dal punto di vista pratico equivalenti, qual'è la più corretta, e se è vero che la chiusura 
degli elementi in questo caso deve essere specchiata rispetto alla loro apertura (come dai 3 
esempi).
Grazie
Michele (Giò)
joyl...@alice.it
 

Michele (Giò) ha scritto:

Non mi sono mai posto questa questione, io uso la 2° , vale a dire che
mi sembrerebbe anche la più logica anche se non mi è chiaro quello
che dici......!
 ---------------------
 Apertura transazione
 Apertura Recordsets
 Inizio transazione
 Modifica dati
 Commissione transazione/O RollBack
 Chiusura Recordsets
 Chiusura transazione -------???
Mi viene un dubbio su cosa intendi come chiusura della Tranzazione....,
visto che il Commit o il RollBack
di fatto la chiudono.... intendevi chiudere il WorkSpace sulla quale
hai iniziato la stessa...??
Questo è un esempio che trovi nell'HELP che a mio avviso è
chiarissimo e senza ombra di dubbio scolastico:
 Set wrkPredefinita = DBEngine.Workspaces(0)
    Set dbsNorthwind = OpenDatabase("Northwind.mdb")
    Set rstImpiegati = _
        dbsNorthwind.OpenRecordset("Impiegati")
    ' Avvia la transazione esterna.
    wrkPredefinita.BeginTrans
    ' Avvia la transazione principale.
    wrkPredefinita.BeginTrans
    With rstImpiegati
        ' Esegue un ciclo nei set di record e chiede all'utente se
        ' modificare la posizione di un determinato impiegato.
        Do Until .EOF
            If !Posizione = "Rappresentanti" Then
                strNome = !Cognome & ", " & !Nome
                strMessaggio = "Impiegato: " & strNome & vbCr & _
                    "Modificare la posizione in Direttore
contabilità?"
                ' Modifica la posizione di un determinato impiegato.
                If MsgBox(strMessaggio, vbYesNo) = vbYes Then
                    .Edit
                    !Posizione = "Direttore contabilità"
                    .Update
                End If
            End If
            .MoveNext
        Loop
        ' Chiede all'utente se desidera confermare
        ' tutte le modifiche sopra apportate.
        If MsgBox("Salva tutte le modifiche?", vbYesNo) = vbYes Then
            wrkPredefinita.CommitTrans
        Else
            wrkPredefinita.Rollback
        End If
        ' Stampa i dati correnti in un set di record.
        .MoveFirst
        Do While Not .EOF
            Debug.Print !Cognome & ", " & !Nome & _
                " - " & !Posizione
            .MoveNext
        Loop
        ' Annulla tutte le modifiche apportate
        ' dall'utente perché si tratta di un esempio.
        wrkPredefinita.Rollback
        .Close
    End With
    dbsNorthwind.Close
Non inventiamo l'acqua calda.... che è la Vigilia....!
;-)
@Alex

 ha scritto nel messaggio 
news:1166956782.6...@f1g2000cwa.googlegroups.com...
Non mi sono mai posto questa questione, io uso la 2° , vale a dire che
mi sembrerebbe anche la piů logica anche se non mi č chiaro quello
che dici......!
 ---------------------
 Apertura transazione
 Apertura Recordsets
 Inizio transazione
 Modifica dati
 Commissione transazione/O RollBack
 Chiusura Recordsets
 Chiusura transazione -------???
Mi viene un dubbio su cosa intendi come chiusura della Tranzazione....,
visto che il Commit o il RollBack
di fatto la chiudono.... intendevi chiudere il WorkSpace sulla quale
hai iniziato la stessa...??
        Sě, in effetti ho sbagliato ad esprimermi, intendevo l'apertura e la chiusura del Workspace.
Questo č un esempio che trovi nell'HELP che a mio avviso č
chiarissimo e senza ombra di dubbio scolastico:
[Cut]
Non inventiamo l'acqua calda.... che č la Vigilia....!
;-)
@Alex
Mammamia, che bastonate che mi prendo, ogni volta!
Beh dai, dal maestro fanno solo che bene.
Michele 




Però Alex, le bastonate si vanno vene, ma la mia domanda non viene a caso, perchè all'interno di una 
transazione ho bisogno di chiudere e riaprire alcuni recordsets con filtri e SQL diversi. Adesso non 
stiamo a discutere su questo metodo che c'entra e non centra, e che comunque funziona bene.
Se durante una transazione chiudo un recordset aperto prima dell'inizio transazione mi genera errore 
(Operazione non supportata nelle transazioni mi dice), per cui nella mia routine apro e chiudo tutti 
i recordsets che mi servono tra il begintrans e il committrans (o rollback).
Dato che volevo portare questa scelta su tutte le routines di salvataggio (per una 
satandardizzazione), volevo solo sapere se questo metodo di operare, che funziona ugualmente e bene, 
venisse utilizzato da qualcuno o se andasse contro la tendenza o addirittura fosse sbagliato.
Non è detto che l'esempio del Northwind sia da emulare per forza, anche perchè se era sbagliato il 
mio operare, potevano pur mettere un appunto da qualche parte quelli della Microsoft no?
Michele 

 Michele
@Alex


Ciao Michele. In un precedente intervento parlavo di unita' operativa.
Tutte le operazioni che fanno parte della unita' operativa (transazione) 
devono essere all'interno della stessa. Se prevedi di aprire e/o 
chiudere dei recordsets all'interno di una transazione mi sembra logico 
che queste operazioni vengano fatte, appunto, all'interno del 
Begin....End. D'altra parte se il tipo di elaborazione e' quella di 
eseguire delle lunghe operazioni di tipo "batch" (i.e. elaborare milioni 
di records) normalmente "n" unita' operative sono all'interno della 
apertura chiusura del file/s in elaborazione. In tal caso mi pare logico 
ed obbligatorio, onde evitare delicate operazioni di risincronizzazione, 
che la apertura/chiusura degli stessi sia all'esterno. Se il rapporto 
fra unita' elaborativa (transazione) e apertura chiusura dei files e' 
1:1 mi verrebbe di dire che inserire le aperture dei recordsets 
all'interno o all'esterno e' ininfluente.
Per farla breve
1 apertura/chiusura --> n Transazioni  : apertura all'esterno
1 Transazione --> n operazioni di apertura/chiusura : aperture/chiusure 
all'interno
1: Transazione --> 1 operazione di apertura/chiusura : "as you like"
Se capitera' l'occasione ho un paio di "nanetti" sui problemi che 
possono generare le transazioni.
-- 
ac
y-1=x

 Se capitera' l'occasione ho un paio di "nanetti" sui problemi che possono generare le transazioni.
Ciao Alessandro, questa sě che č una risposta che mi illumina d'immenso!
Se per nanetti intendi recensioni scritte da te, sarei proprio curioso di leggerle! Magari saranno 
superflue al mio operato, ma č bene conoscere bene le bestie se si vuole che obbediscano....
Buon Natale.
Michele